mirror of
				https://github.com/luanti-org/minetest_game.git
				synced 2025-10-30 23:25:33 +01:00 
			
		
		
		
	Merge remote-tracking branch 'upstream/master' into dev
This commit is contained in:
		
							
								
								
									
										16
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										16
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,16 +0,0 @@ | |||||||
| name: build |  | ||||||
| on: [push, pull_request] |  | ||||||
|  |  | ||||||
| jobs: |  | ||||||
|   luacheck: |  | ||||||
|     runs-on: ubuntu-latest |  | ||||||
|     steps: |  | ||||||
|     - uses: actions/checkout@v2 |  | ||||||
|     - name: Install Luarocks |  | ||||||
|       run: | |  | ||||||
|         sudo apt-get update -qyy |  | ||||||
|         sudo apt-get install luarocks -qyy |  | ||||||
|     - name: Install Luacheck |  | ||||||
|       run: luarocks install --local luacheck |  | ||||||
|     - name: Run Luacheck |  | ||||||
|       run: $HOME/.luarocks/bin/luacheck mods |  | ||||||
							
								
								
									
										13
									
								
								.github/workflows/luacheck.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								.github/workflows/luacheck.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | |||||||
|  | name: luacheck | ||||||
|  | on: [push, pull_request] | ||||||
|  |  | ||||||
|  | jobs: | ||||||
|  |   luacheck: | ||||||
|  |     runs-on: ubuntu-latest | ||||||
|  |     steps: | ||||||
|  |       - name: Checkout | ||||||
|  |         uses: actions/checkout@v4 | ||||||
|  |       - name: Luacheck | ||||||
|  |         uses: lunarmodules/luacheck@master | ||||||
|  |         with: | ||||||
|  |           args: mods | ||||||
							
								
								
									
										11
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | name: test | ||||||
|  | on: [push, pull_request] | ||||||
|  |  | ||||||
|  | jobs: | ||||||
|  |   test: | ||||||
|  |     runs-on: ubuntu-latest | ||||||
|  |     timeout-minutes: 5 | ||||||
|  |     steps: | ||||||
|  |     - uses: actions/checkout@v4 | ||||||
|  |  | ||||||
|  |     - run: ./utils/test/run.sh | ||||||
							
								
								
									
										19
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								README.md
									
									
									
									
									
								
							| @@ -8,8 +8,8 @@ real goals or built-in enemy mobs. | |||||||
| While it provides a basic gameplay experience out of the box, it is best played | While it provides a basic gameplay experience out of the box, it is best played | ||||||
| with mods. | with mods. | ||||||
|  |  | ||||||
| Minetest Game is currently in maintenance-only mode, meaning it will not see new | Minetest Game is in perpetual maintenance-only mode, meaning it will not see new | ||||||
| gameplay features or anything else that breaks compatibility (See | gameplay features or anything else that breaks compatibility (see | ||||||
| [#2710](https://github.com/minetest/minetest_game/issues/2710)). | [#2710](https://github.com/minetest/minetest_game/issues/2710)). | ||||||
|  |  | ||||||
| ## Installation | ## Installation | ||||||
| @@ -17,13 +17,13 @@ gameplay features or anything else that breaks compatibility (See | |||||||
| ### ContentDB | ### ContentDB | ||||||
|  |  | ||||||
| * Content > Browse Online Content | * Content > Browse Online Content | ||||||
| * Search for Minetest Game | * Search for "[Minetest Game](https://content.minetest.net/packages/Minetest/minetest_game/)" | ||||||
| * Click Install | * Click Install | ||||||
|  |  | ||||||
| ### Manually | ### Manually | ||||||
|  |  | ||||||
| - Unzip the archive, rename the folder to `minetest_game` and | - Unzip the archive, rename the folder to `minetest_game` and | ||||||
| place it in .. `minetest/games/` | place it in `.../minetest/games/` | ||||||
|  |  | ||||||
| - GNU/Linux: If you use a system-wide installation place it in `~/.minetest/games/`. | - GNU/Linux: If you use a system-wide installation place it in `~/.minetest/games/`. | ||||||
|  |  | ||||||
| @@ -33,14 +33,13 @@ For further information or help, see: [Installing Mods](https://wiki.minetest.ne | |||||||
|  |  | ||||||
| ## Compatibility | ## Compatibility | ||||||
|  |  | ||||||
| The Minetest Game GitHub `master` `HEAD` is generally compatible with the GitHub | As of January 2024 Minetest Game follows a **rolling release** model with new changes being automatically | ||||||
| `master` `HEAD` of the Minetest engine. | published on ContentDB every day. | ||||||
|  |  | ||||||
| Additionally, when the Minetest engine is tagged to be a certain version (e.g. | There are no stable releases or tags, all existing ones are considered legacy. | ||||||
| `0.4.10`), Minetest Game is tagged with the version, too. |  | ||||||
|  |  | ||||||
| When stable releases are made, Minetest Game and the Minetest engine is packaged | Minetest Game is always compatible to the latest stable release of the engine. | ||||||
| and made available at [www.minetest.net](https://www.minetest.net/downloads/). | Older releases may be supported too depending on circumstances. | ||||||
|  |  | ||||||
| ## Licensing | ## Licensing | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										58
									
								
								game_api.txt
									
									
									
									
									
								
							
							
						
						
									
										58
									
								
								game_api.txt
									
									
									
									
									
								
							| @@ -324,7 +324,7 @@ Allows creation of new fences with "fencelike" drawtype. | |||||||
| 	name = "default:fence_wood", | 	name = "default:fence_wood", | ||||||
| 	description = "Wooden Fence", | 	description = "Wooden Fence", | ||||||
| 	texture = "default_wood.png", | 	texture = "default_wood.png", | ||||||
| 	material = "default:wood", | 	material = "default:wood", -- `nil` if you don't want the recipe | ||||||
| 	groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, | 	groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, | ||||||
| 	sounds = default.node_sound_wood_defaults(), | 	sounds = default.node_sound_wood_defaults(), | ||||||
|  |  | ||||||
| @@ -382,6 +382,8 @@ The farming API allows you to easily register plants and hoes. | |||||||
| 		-- ^ Always provide a plant texture for each step, format: modname_plantname_i.png (i = stepnumber) | 		-- ^ Always provide a plant texture for each step, format: modname_plantname_i.png (i = stepnumber) | ||||||
| 		minlight = 13,                         -- Minimum light to grow | 		minlight = 13,                         -- Minimum light to grow | ||||||
| 		maxlight = default.LIGHT_MAX           -- Maximum light to grow | 		maxlight = default.LIGHT_MAX           -- Maximum light to grow | ||||||
|  | 		can_grow = function(pos)               -- Сalled every growth tick to check if the plant can grow, returns bool | ||||||
|  | 		                                       -- (optional, checks for wet soil by default) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -632,6 +634,34 @@ set a players home position and teleport a player to home position. | |||||||
|  * `name` Player you wish to teleport to their home position |  * `name` Player you wish to teleport to their home position | ||||||
|  * return value: false if player cannot be sent home, otherwise true |  * return value: false if player cannot be sent home, otherwise true | ||||||
|  |  | ||||||
|  | Spawn API | ||||||
|  | --------- | ||||||
|  |  | ||||||
|  | The spawn mod takes care of deciding the position of new and respawning players | ||||||
|  | in the world and has an API to modify its behavior. | ||||||
|  |  | ||||||
|  | `spawn.get_default_pos()` | ||||||
|  | * Gets the default spawn position as decided by a biome-dependent algorithm. | ||||||
|  | * This is not influenced by settings like "static_spawnpoint" or "engine_spawn". | ||||||
|  | * return value: a vector or `nil` on failure | ||||||
|  |  | ||||||
|  | `spawn.add_suitable_biome(biome)`: | ||||||
|  | * Adds a biome to the list of allowed biomes for the above algorithm. | ||||||
|  | * `biome`: Name of a registered biome | ||||||
|  |  | ||||||
|  | `spawn.register_on_spawn(func)`: | ||||||
|  | * Registers a callback to be called when a player (re-)spawns. This can be used | ||||||
|  |   to intercept the normal logic to e.g. respawn a player at his bed. | ||||||
|  | * `func`: `function(player, is_new)` with arguments | ||||||
|  |   - `player`: ObjectRef | ||||||
|  |   - `is_new`: true if the player is joining the server for the first time | ||||||
|  |   - return value: true to skip all other spawn logic, false or nil otherwise | ||||||
|  |  | ||||||
|  | When a player (re-)spawns the following order is executed: | ||||||
|  | 1. All spawn callbacks in order of registration. | ||||||
|  | 2. If no result, teleport player to `spawn.get_default_pos()`. | ||||||
|  | 3. If that fails, spawning is left up to engine. | ||||||
|  |  | ||||||
|  |  | ||||||
| Sfinv API | Sfinv API | ||||||
| --------- | --------- | ||||||
| @@ -1169,3 +1199,29 @@ the log. | |||||||
|  * after logging the action, the original callback (if any) is called |  * after logging the action, the original callback (if any) is called | ||||||
|  * `def`     See [Node definition] |  * `def`     See [Node definition] | ||||||
|  * `name`    Description of the node in the log message |  * `name`    Description of the node in the log message | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Weather API | ||||||
|  | ----------- | ||||||
|  |  | ||||||
|  | The weather mod will constantly adjust weather effects seen by the player | ||||||
|  | (that is: cloud parameters and shadow intensity). | ||||||
|  | These can be influenced using this API. | ||||||
|  |  | ||||||
|  | #### `weather.get = function(player)` | ||||||
|  |  | ||||||
|  | * Returns the current weather effects seen by the player. | ||||||
|  |   It returns a table with two keys: | ||||||
|  |   * `clouds`:   A table (or `nil`) with cloud data following the same format as used for `player:set_clouds()`. | ||||||
|  |   * `lighting`: A table (or `nil`) with lighting data following the same format as used for `player:set_lighting()`. | ||||||
|  | * `player`: ObjectRef of the relevant player | ||||||
|  | * You can override this function to change the weather effects by simply returning different values. | ||||||
|  |   Setting `clouds` or `lighting` in the result table to `nil` will *prevent* those from changing. | ||||||
|  |  | ||||||
|  | Utilities | ||||||
|  | --------- | ||||||
|  |  | ||||||
|  | `default.dig_up(pos, node, digger, max_height)` | ||||||
|  |  | ||||||
|  |  * Find all nodes above `pos` that is the same, then dig them all | ||||||
|  |  * `max_height`	Maximum number of nodes to iterate. Default: 100 | ||||||
|   | |||||||
| @@ -1,5 +1,10 @@ | |||||||
|  | -- Removes a node without calling on on_destruct() | ||||||
| local reverse = true | -- We use this to mess with bed nodes without causing unwanted recursion. | ||||||
|  | local function remove_no_destruct(pos) | ||||||
|  | 	minetest.swap_node(pos, {name = "air"}) | ||||||
|  | 	minetest.remove_node(pos) -- Now clear the meta | ||||||
|  | 	minetest.check_for_falling(pos) | ||||||
|  | end | ||||||
|  |  | ||||||
| local function destruct_bed(pos, n) | local function destruct_bed(pos, n) | ||||||
| 	local node = minetest.get_node(pos) | 	local node = minetest.get_node(pos) | ||||||
| @@ -12,15 +17,11 @@ local function destruct_bed(pos, n) | |||||||
| 		local dir = minetest.facedir_to_dir(node.param2) | 		local dir = minetest.facedir_to_dir(node.param2) | ||||||
| 		other = vector.add(pos, dir) | 		other = vector.add(pos, dir) | ||||||
| 	end | 	end | ||||||
|  | 	local oname = minetest.get_node(other).name | ||||||
| 	if reverse then | 	if minetest.get_item_group(oname, "bed") ~= 0 then | ||||||
| 		reverse = not reverse | 	   remove_no_destruct(other) | ||||||
| 		minetest.remove_node(other) | 	   beds.remove_spawns_at(pos) | ||||||
| 		minetest.check_for_falling(other) | 	   beds.remove_spawns_at(other) | ||||||
| 		beds.remove_spawns_at(pos) |  | ||||||
| 		beds.remove_spawns_at(other) |  | ||||||
| 	else |  | ||||||
| 		reverse = not reverse |  | ||||||
| 	end | 	end | ||||||
| end | end | ||||||
|  |  | ||||||
| @@ -113,6 +114,7 @@ function beds.register_bed(name, def) | |||||||
|  |  | ||||||
| 		on_rotate = function(pos, node, user, _, new_param2) | 		on_rotate = function(pos, node, user, _, new_param2) | ||||||
| 			local dir = minetest.facedir_to_dir(node.param2) | 			local dir = minetest.facedir_to_dir(node.param2) | ||||||
|  | 			-- old position of the top node | ||||||
| 			local p = vector.add(pos, dir) | 			local p = vector.add(pos, dir) | ||||||
| 			local node2 = minetest.get_node_or_nil(p) | 			local node2 = minetest.get_node_or_nil(p) | ||||||
| 			if not node2 or minetest.get_item_group(node2.name, "bed") ~= 2 or | 			if not node2 or minetest.get_item_group(node2.name, "bed") ~= 2 or | ||||||
| @@ -126,6 +128,7 @@ function beds.register_bed(name, def) | |||||||
| 			if new_param2 % 32 > 3 then | 			if new_param2 % 32 > 3 then | ||||||
| 				return false | 				return false | ||||||
| 			end | 			end | ||||||
|  | 			-- new position of the top node | ||||||
| 			local newp = vector.add(pos, minetest.facedir_to_dir(new_param2)) | 			local newp = vector.add(pos, minetest.facedir_to_dir(new_param2)) | ||||||
| 			local node3 = minetest.get_node_or_nil(newp) | 			local node3 = minetest.get_node_or_nil(newp) | ||||||
| 			local node_def = node3 and minetest.registered_nodes[node3.name] | 			local node_def = node3 and minetest.registered_nodes[node3.name] | ||||||
| @@ -137,8 +140,7 @@ function beds.register_bed(name, def) | |||||||
| 				return false | 				return false | ||||||
| 			end | 			end | ||||||
| 			node.param2 = new_param2 | 			node.param2 = new_param2 | ||||||
| 			-- do not remove_node here - it will trigger destroy_bed() | 			remove_no_destruct(p) | ||||||
| 			minetest.set_node(p, {name = "air"}) |  | ||||||
| 			minetest.set_node(pos, node) | 			minetest.set_node(pos, node) | ||||||
| 			minetest.set_node(newp, {name = name .. "_top", param2 = new_param2}) | 			minetest.set_node(newp, {name = name .. "_top", param2 = new_param2}) | ||||||
| 			return true | 			return true | ||||||
|   | |||||||
| @@ -66,7 +66,7 @@ beds.register_bed("beds:bed", { | |||||||
| 			"beds_bed_under.png", | 			"beds_bed_under.png", | ||||||
| 			"beds_bed_side_bottom_r.png", | 			"beds_bed_side_bottom_r.png", | ||||||
| 			"beds_bed_side_bottom_r.png^[transformFX", | 			"beds_bed_side_bottom_r.png^[transformFX", | ||||||
| 			"beds_transparent.png", | 			"blank.png", | ||||||
| 			"beds_bed_side_bottom.png" | 			"beds_bed_side_bottom.png" | ||||||
| 		}, | 		}, | ||||||
| 		top = { | 		top = { | ||||||
| @@ -75,7 +75,7 @@ beds.register_bed("beds:bed", { | |||||||
| 			"beds_bed_side_top_r.png", | 			"beds_bed_side_top_r.png", | ||||||
| 			"beds_bed_side_top_r.png^[transformFX", | 			"beds_bed_side_top_r.png^[transformFX", | ||||||
| 			"beds_bed_side_top.png", | 			"beds_bed_side_top.png", | ||||||
| 			"beds_transparent.png", | 			"blank.png", | ||||||
| 		} | 		} | ||||||
| 	}, | 	}, | ||||||
| 	nodebox = { | 	nodebox = { | ||||||
|   | |||||||
| @@ -244,10 +244,9 @@ end | |||||||
| -- Callbacks | -- Callbacks | ||||||
| -- Only register respawn callback if respawn enabled | -- Only register respawn callback if respawn enabled | ||||||
| if enable_respawn then | if enable_respawn then | ||||||
| 	-- respawn player at bed if enabled and valid position is found | 	-- Respawn player at bed if valid position is found | ||||||
| 	minetest.register_on_respawnplayer(function(player) | 	spawn.register_on_spawn(function(player, is_new) | ||||||
| 		local name = player:get_player_name() | 		local pos = beds.spawn[player:get_player_name()] | ||||||
| 		local pos = beds.spawn[name] |  | ||||||
| 		if pos then | 		if pos then | ||||||
| 			player:set_pos(pos) | 			player:set_pos(pos) | ||||||
| 			return true | 			return true | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| # textdomain: beds | # textdomain: beds | ||||||
| Fancy Bed=Luksa Lito | Fancy Bed=Luksa lito | ||||||
| Simple Bed=Simpla Lito | Simple Bed=Simpla lito | ||||||
| This bed is already occupied!=Tiu lito jam estas okupata! | This bed is already occupied!=Tiu lito jam estas okupata! | ||||||
| You have to stop moving before going to bed!=Vi ĉesu moviĝi por enlitiĝi! | You have to stop moving before going to bed!=Vi ĉesu moviĝi por enlitiĝi! | ||||||
| Good morning.=Bonan matenon. | Good morning.=Bonan matenon. | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| # textdomain: beds | # textdomain: beds | ||||||
| Fancy Bed=Детализированная Кровать | Fancy Bed=Красивая кровать | ||||||
| Simple Bed=Обычная Кровать | Simple Bed=Простая кровать | ||||||
| This bed is already occupied!=Эта кровать уже занята! | This bed is already occupied!=Эта кровать уже занята! | ||||||
| You have to stop moving before going to bed!=Нельзя воспользоваться кроватью на ходу! | You have to stop moving before going to bed!=Вам нужно перестать двигаться чтобы лечь! | ||||||
| Good morning.=Доброе утро. | Good morning.=Доброе утро. | ||||||
| @1 of @2 players are in bed=@1 из @2 игроков в кровати | @1 of @2 players are in bed=@1 из @2 игроков в кровати | ||||||
| Force night skip=Пропустить ночь | Force night skip=Пропустить ночь | ||||||
|   | |||||||
| @@ -1,3 +1,3 @@ | |||||||
| name = beds | name = beds | ||||||
| description = Minetest Game mod: beds | description = Minetest Game mod: beds | ||||||
| depends = default, wool | depends = default, wool, spawn | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 83 B | 
| @@ -1,3 +1,3 @@ | |||||||
| # textdomain: binoculars | # textdomain: binoculars | ||||||
| Binoculars=Бинокль | Binoculars=Бинокль | ||||||
| Use with 'Zoom' key=Используется с привилегией 'Zoom' | Use with 'Zoom' key=Используется клавишей 'Приближение' | ||||||
|   | |||||||
| @@ -16,6 +16,27 @@ local function is_owner(pos, name) | |||||||
| 	return false | 	return false | ||||||
| end | end | ||||||
|  |  | ||||||
|  | local function drop(pos, itemstack) | ||||||
|  | 	local obj = minetest.add_item(pos, itemstack:take_item(itemstack:get_count())) | ||||||
|  | 	if obj then | ||||||
|  | 		obj:set_velocity({ | ||||||
|  | 			x = math.random(-10, 10) / 9, | ||||||
|  | 			y = 5, | ||||||
|  | 			z = math.random(-10, 10) / 9, | ||||||
|  | 		}) | ||||||
|  | 	end | ||||||
|  | end | ||||||
|  |  | ||||||
|  | local function drop_contents(pos) | ||||||
|  | 	local inv = minetest.get_meta(pos):get_inventory() | ||||||
|  |  | ||||||
|  | 	for i = 1, inv:get_size("main") do | ||||||
|  | 		local stk = inv:get_stack("main", i) | ||||||
|  | 		drop(pos, stk) | ||||||
|  | 	end | ||||||
|  | 	minetest.remove_node(pos) | ||||||
|  | end | ||||||
|  |  | ||||||
| local bones_formspec = | local bones_formspec = | ||||||
| 	"size[8,9]" .. | 	"size[8,9]" .. | ||||||
| 	"list[current_name;main;0,0.3;8,4;]" .. | 	"list[current_name;main;0,0.3;8,4;]" .. | ||||||
| @@ -87,6 +108,11 @@ local bones_def = { | |||||||
| 			return | 			return | ||||||
| 		end | 		end | ||||||
|  |  | ||||||
|  | 		if not player:is_player() then | ||||||
|  | 			drop_contents(pos) | ||||||
|  | 			return | ||||||
|  | 		end | ||||||
|  |  | ||||||
| 		if minetest.get_meta(pos):get_string("infotext") == "" then | 		if minetest.get_meta(pos):get_string("infotext") == "" then | ||||||
| 			return | 			return | ||||||
| 		end | 		end | ||||||
| @@ -171,17 +197,6 @@ local function may_replace(pos, player) | |||||||
| 	return node_definition.buildable_to | 	return node_definition.buildable_to | ||||||
| end | end | ||||||
|  |  | ||||||
| local drop = function(pos, itemstack) |  | ||||||
| 	local obj = minetest.add_item(pos, itemstack:take_item(itemstack:get_count())) |  | ||||||
| 	if obj then |  | ||||||
| 		obj:set_velocity({ |  | ||||||
| 			x = math.random(-10, 10) / 9, |  | ||||||
| 			y = 5, |  | ||||||
| 			z = math.random(-10, 10) / 9, |  | ||||||
| 		}) |  | ||||||
| 	end |  | ||||||
| end |  | ||||||
|  |  | ||||||
| local player_inventory_lists = { "main", "craft" } | local player_inventory_lists = { "main", "craft" } | ||||||
| bones.player_inventory_lists = player_inventory_lists | bones.player_inventory_lists = player_inventory_lists | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| # textdomain: bones | # textdomain: bones | ||||||
| Bones=Кости | Bones=Кости | ||||||
| @1's old bones=Старые кости @1 | @1's old bones=Старые кости @1 | ||||||
| @1 died at @2.=@1 умер в @2. | @1 died at @2.=Игрок @1 умер в @2. | ||||||
| @1 died at @2, and dropped their inventory.=@1 умер в @2 и потерял содержимое своего инвентаря.  | @1 died at @2, and dropped their inventory.=Игрок @1 умер в @2 и потерял содержимое своего инвентаря. | ||||||
| @1 died at @2, and bones were placed.=@1 умер в @2, помещены кости. | @1 died at @2, and bones were placed.=Игрок @1 умер в @2, кости размещены. | ||||||
| @1's fresh bones=новые кости @1 | @1's fresh bones=Новые кости @1 | ||||||
| @1's bones=кости @1 | @1's bones=Кости @1 | ||||||
|   | |||||||
| @@ -33,6 +33,11 @@ local function check_protection(pos, name, text) | |||||||
| 	return false | 	return false | ||||||
| end | end | ||||||
|  |  | ||||||
|  | local function log_action(pos, name, action) | ||||||
|  | 	minetest.log("action", (name ~= "" and name or "A mod") | ||||||
|  | 		.. " " .. action .. " at " .. minetest.pos_to_string(pos) .. " with a bucket") | ||||||
|  | end | ||||||
|  |  | ||||||
| -- Register a new liquid | -- Register a new liquid | ||||||
| --    source = name of the source node | --    source = name of the source node | ||||||
| --    flowing = name of the flowing node | --    flowing = name of the flowing node | ||||||
| @@ -101,13 +106,13 @@ function bucket.register_liquid(source, flowing, itemname, inventory_image, name | |||||||
| 					end | 					end | ||||||
| 				end | 				end | ||||||
|  |  | ||||||
| 				if check_protection(lpos, user | 				local pname = user and user:get_player_name() or "" | ||||||
| 						and user:get_player_name() | 				if check_protection(lpos, pname, "place "..source) then | ||||||
| 						or "", "place "..source) then |  | ||||||
| 					return | 					return | ||||||
| 				end | 				end | ||||||
|  |  | ||||||
| 				minetest.set_node(lpos, {name = source}) | 				minetest.set_node(lpos, {name = source}) | ||||||
|  | 				log_action(lpos, pname, "placed " .. source) | ||||||
| 				return ItemStack("bucket:bucket_empty") | 				return ItemStack("bucket:bucket_empty") | ||||||
| 			end | 			end | ||||||
| 		}) | 		}) | ||||||
| @@ -128,16 +133,16 @@ minetest.register_craftitem("bucket:bucket_empty", { | |||||||
| 			return | 			return | ||||||
| 		end | 		end | ||||||
| 		-- Check if pointing to a liquid source | 		-- Check if pointing to a liquid source | ||||||
| 		local node = minetest.get_node(pointed_thing.under) | 		local pos = pointed_thing.under | ||||||
|  | 		local node = minetest.get_node(pos) | ||||||
| 		local liquiddef = bucket.liquids[node.name] | 		local liquiddef = bucket.liquids[node.name] | ||||||
| 		local item_count = user:get_wielded_item():get_count() | 		local item_count = user:get_wielded_item():get_count() | ||||||
|  |  | ||||||
| 		if liquiddef ~= nil | 		if liquiddef ~= nil | ||||||
| 		and liquiddef.itemname ~= nil | 		and liquiddef.itemname ~= nil | ||||||
| 		and node.name == liquiddef.source then | 		and node.name == liquiddef.source then | ||||||
| 			if check_protection(pointed_thing.under, | 			local pname = user:get_player_name() | ||||||
| 					user:get_player_name(), | 			if check_protection(pos, pname, "take ".. node.name) then | ||||||
| 					"take ".. node.name) then |  | ||||||
| 				return | 				return | ||||||
| 			end | 			end | ||||||
|  |  | ||||||
| @@ -152,9 +157,9 @@ minetest.register_craftitem("bucket:bucket_empty", { | |||||||
| 				if inv:room_for_item("main", {name=liquiddef.itemname}) then | 				if inv:room_for_item("main", {name=liquiddef.itemname}) then | ||||||
| 					inv:add_item("main", liquiddef.itemname) | 					inv:add_item("main", liquiddef.itemname) | ||||||
| 				else | 				else | ||||||
| 					local pos = user:get_pos() | 					local upos = user:get_pos() | ||||||
| 					pos.y = math.floor(pos.y + 0.5) | 					upos.y = math.floor(upos.y + 0.5) | ||||||
| 					minetest.add_item(pos, liquiddef.itemname) | 					minetest.add_item(upos, liquiddef.itemname) | ||||||
| 				end | 				end | ||||||
|  |  | ||||||
| 				-- set to return empty buckets minus 1 | 				-- set to return empty buckets minus 1 | ||||||
| @@ -166,10 +171,13 @@ minetest.register_craftitem("bucket:bucket_empty", { | |||||||
| 			local source_neighbor = false | 			local source_neighbor = false | ||||||
| 			if liquiddef.force_renew then | 			if liquiddef.force_renew then | ||||||
| 				source_neighbor = | 				source_neighbor = | ||||||
| 					minetest.find_node_near(pointed_thing.under, 1, liquiddef.source) | 					minetest.find_node_near(pos, 1, liquiddef.source) | ||||||
| 			end | 			end | ||||||
| 			if not (source_neighbor and liquiddef.force_renew) then | 			if source_neighbor and liquiddef.force_renew then | ||||||
| 				minetest.add_node(pointed_thing.under, {name = "air"}) | 				log_action(pos, pname, "picked up " .. liquiddef.source .. " (force renewed)") | ||||||
|  | 			else | ||||||
|  | 				minetest.add_node(pos, {name = "air"}) | ||||||
|  | 				log_action(pos, pname, "picked up " .. liquiddef.source) | ||||||
| 			end | 			end | ||||||
|  |  | ||||||
| 			return ItemStack(giving_back) | 			return ItemStack(giving_back) | ||||||
| @@ -177,7 +185,7 @@ minetest.register_craftitem("bucket:bucket_empty", { | |||||||
| 			-- non-liquid nodes will have their on_punch triggered | 			-- non-liquid nodes will have their on_punch triggered | ||||||
| 			local node_def = minetest.registered_nodes[node.name] | 			local node_def = minetest.registered_nodes[node.name] | ||||||
| 			if node_def then | 			if node_def then | ||||||
| 				node_def.on_punch(pointed_thing.under, node, user, pointed_thing) | 				node_def.on_punch(pos, node, user, pointed_thing) | ||||||
| 			end | 			end | ||||||
| 			return user:get_wielded_item() | 			return user:get_wielded_item() | ||||||
| 		end | 		end | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| # textdomain: bucket | # textdomain: bucket | ||||||
| Empty Bucket=Malplena Sitelo | Empty Bucket=Malplena sitelo | ||||||
| Water Bucket=Sitelo da Akvo | Water Bucket=Sitelo da akvo | ||||||
| River Water Bucket=Sitelo da Rivera Akvo | River Water Bucket=Sitelo da rivera akvo | ||||||
| Lava Bucket=Sitelo da Lafo | Lava Bucket=Sitelo da lafo | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| # textdomain: bucket | # textdomain: bucket | ||||||
| Empty Bucket=Пустое Ведро | Empty Bucket=Пустое ведро | ||||||
| Water Bucket=Ведро с Водой | Water Bucket=Ведро с водой | ||||||
| River Water Bucket=Ведро с Речной Водой | River Water Bucket=Ведро с речной водой | ||||||
| Lava Bucket=Ведро с Лавой | Lava Bucket=Ведро с лавой | ||||||
|   | |||||||
| @@ -3,6 +3,9 @@ | |||||||
| -- Load support for MT game translation. | -- Load support for MT game translation. | ||||||
| local S = minetest.get_translator("butterflies") | local S = minetest.get_translator("butterflies") | ||||||
|  |  | ||||||
|  | -- Legacy compatibility, when pointabilities don't exist, pointable is set to true. | ||||||
|  | local pointable_compat = not minetest.features.item_specific_pointabilities | ||||||
|  |  | ||||||
| -- register butterflies | -- register butterflies | ||||||
| local butter_list = { | local butter_list = { | ||||||
| 	{"white",  S("White Butterfly")}, | 	{"white",  S("White Butterfly")}, | ||||||
| @@ -33,24 +36,15 @@ for i in ipairs (butter_list) do | |||||||
| 		sunlight_propagates = true, | 		sunlight_propagates = true, | ||||||
| 		buildable_to = true, | 		buildable_to = true, | ||||||
| 		walkable = false, | 		walkable = false, | ||||||
|  | 		pointable = pointable_compat, | ||||||
| 		groups = {catchable = 1}, | 		groups = {catchable = 1}, | ||||||
| 		selection_box = { | 		selection_box = { | ||||||
| 			type = "fixed", | 			type = "fixed", | ||||||
| 			fixed = {-0.1, -0.1, -0.1, 0.1, 0.1, 0.1}, | 			fixed = {-0.1, -0.1, -0.1, 0.1, 0.1, 0.1}, | ||||||
| 		}, | 		}, | ||||||
| 		floodable = true, | 		floodable = true, | ||||||
| 		on_place = function(itemstack, placer, pointed_thing) | 		on_construct = function(pos) | ||||||
| 			local player_name = placer:get_player_name() | 			minetest.get_node_timer(pos):start(1) | ||||||
| 			local pos = pointed_thing.above |  | ||||||
|  |  | ||||||
| 			if not minetest.is_protected(pos, player_name) and |  | ||||||
| 					not minetest.is_protected(pointed_thing.under, player_name) and |  | ||||||
| 					minetest.get_node(pos).name == "air" then |  | ||||||
| 				minetest.set_node(pos, {name = "butterflies:butterfly_"..name}) |  | ||||||
| 				minetest.get_node_timer(pos):start(1) |  | ||||||
| 				itemstack:take_item() |  | ||||||
| 			end |  | ||||||
| 			return itemstack |  | ||||||
| 		end, | 		end, | ||||||
| 		on_timer = function(pos, elapsed) | 		on_timer = function(pos, elapsed) | ||||||
| 			if minetest.get_node_light(pos) < 11 then | 			if minetest.get_node_light(pos) < 11 then | ||||||
| @@ -72,18 +66,8 @@ for i in ipairs (butter_list) do | |||||||
| 		drop = "", | 		drop = "", | ||||||
| 		groups = {not_in_creative_inventory = 1}, | 		groups = {not_in_creative_inventory = 1}, | ||||||
| 		floodable = true, | 		floodable = true, | ||||||
| 		on_place = function(itemstack, placer, pointed_thing) | 		on_construct = function(pos) | ||||||
| 			local player_name = placer:get_player_name() | 			minetest.get_node_timer(pos):start(1) | ||||||
| 			local pos = pointed_thing.above |  | ||||||
|  |  | ||||||
| 			if not minetest.is_protected(pos, player_name) and |  | ||||||
| 					not minetest.is_protected(pointed_thing.under, player_name) and |  | ||||||
| 					minetest.get_node(pos).name == "air" then |  | ||||||
| 				minetest.set_node(pos, {name = "butterflies:hidden_butterfly_"..name}) |  | ||||||
| 				minetest.get_node_timer(pos):start(1) |  | ||||||
| 				itemstack:take_item() |  | ||||||
| 			end |  | ||||||
| 			return itemstack |  | ||||||
| 		end, | 		end, | ||||||
| 		on_timer = function(pos, elapsed) | 		on_timer = function(pos, elapsed) | ||||||
| 			if minetest.get_node_light(pos) >= 11 then | 			if minetest.get_node_light(pos) >= 11 then | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| # textdomain: butterflies | # textdomain: butterflies | ||||||
| White Butterfly=Blanka Papilio | White Butterfly=Blanka papilio | ||||||
| Red Butterfly=Ruĝa Papilio | Red Butterfly=Ruĝa papilio | ||||||
| Violet Butterfly=Violkolora Papilio | Violet Butterfly=Violkolora papilio | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| # textdomain: butterflies | # textdomain: butterflies | ||||||
| White Butterfly= | White Butterfly=Borboleta Branca | ||||||
| Red Butterfly= | Red Butterfly=Borboleta Vermelha | ||||||
| Violet Butterfly= | Violet Butterfly=Borboleta Violeta | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| # textdomain: butterflies | # textdomain: butterflies | ||||||
| White Butterfly=Белая Бабочка | White Butterfly=Белая бабочка | ||||||
| Red Butterfly=Красная Бабочка | Red Butterfly=Красная бабочка | ||||||
| Violet Butterfly=Фиолетовая Бабочка | Violet Butterfly=Фиолетовая бабочка | ||||||
|   | |||||||
| @@ -413,7 +413,8 @@ minetest.register_craftitem("carts:cart", { | |||||||
| 		minetest.sound_play({name = "default_place_node_metal", gain = 0.5}, | 		minetest.sound_play({name = "default_place_node_metal", gain = 0.5}, | ||||||
| 			{pos = pointed_thing.above}, true) | 			{pos = pointed_thing.above}, true) | ||||||
|  |  | ||||||
| 		if not minetest.is_creative_enabled(placer:get_player_name()) then | 		local player_name = placer and placer:get_player_name() or "" | ||||||
|  | 		if not minetest.is_creative_enabled(player_name) then | ||||||
| 			itemstack:take_item() | 			itemstack:take_item() | ||||||
| 		end | 		end | ||||||
| 		return itemstack | 		return itemstack | ||||||
|   | |||||||
| @@ -2,5 +2,5 @@ | |||||||
| Cart=Ĉaro | Cart=Ĉaro | ||||||
| (Sneak+Click to pick up)=(Ŝteliri+Alklaki por reprini) | (Sneak+Click to pick up)=(Ŝteliri+Alklaki por reprini) | ||||||
| Rail=Relo | Rail=Relo | ||||||
| Powered Rail=Elektra Relo | Powered Rail=Elektra relo | ||||||
| Brake Rail=Bremsa Relo | Brake Rail=Bremsa relo | ||||||
|   | |||||||
| @@ -2,5 +2,5 @@ | |||||||
| Cart=Вагонетка | Cart=Вагонетка | ||||||
| (Sneak+Click to pick up)=(Пригнитесь и кликните по вагонетке, чтобы забрать) | (Sneak+Click to pick up)=(Пригнитесь и кликните по вагонетке, чтобы забрать) | ||||||
| Rail=Рельсы | Rail=Рельсы | ||||||
| Powered Rail=Запитанные рельсы | Powered Rail=Ускоряющие рельсы | ||||||
| Brake Rail=Тормозящие рельсы | Brake Rail=Тормозящие рельсы | ||||||
|   | |||||||
| @@ -170,6 +170,7 @@ function creative.register_tab(name, title, items) | |||||||
| 				"tooltip[creative_prev;" .. esc(S("Previous page")) .. "]" .. | 				"tooltip[creative_prev;" .. esc(S("Previous page")) .. "]" .. | ||||||
| 				"tooltip[creative_next;" .. esc(S("Next page")) .. "]" .. | 				"tooltip[creative_next;" .. esc(S("Next page")) .. "]" .. | ||||||
| 				"listring[current_player;main]" .. | 				"listring[current_player;main]" .. | ||||||
|  | 				"field_enter_after_edit[creative_filter;true]" .. | ||||||
| 				"field_close_on_enter[creative_filter;false]" .. | 				"field_close_on_enter[creative_filter;false]" .. | ||||||
| 				"field[0.3,4.2;2.8,1.2;creative_filter;;" .. esc(inv.filter) .. "]" .. | 				"field[0.3,4.2;2.8,1.2;creative_filter;;" .. esc(inv.filter) .. "]" .. | ||||||
| 				"listring[detached:creative_" .. player_name .. ";main]" .. | 				"listring[detached:creative_" .. player_name .. ";main]" .. | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| # textdomain: creative | # textdomain: creative | ||||||
| Allow player to use creative inventory=Разрешить игроку использовать творческий инвентарь | Allow player to use creative inventory=Разрешить игроку использовать творческий инвентарь | ||||||
| No items to show.= | No items to show.=Нет предметов. | ||||||
| Search=Поиск | Search=Поиск | ||||||
| Reset=Сброс | Reset=Сброс | ||||||
| Previous page=Предыдущая страница | Previous page=Предыдущая страница | ||||||
|   | |||||||
| @@ -163,12 +163,12 @@ function default.chest.register_chest(prefixed_name, d) | |||||||
| 			local itemstack = player:get_wielded_item() | 			local itemstack = player:get_wielded_item() | ||||||
| 			local key_meta = itemstack:get_meta() | 			local key_meta = itemstack:get_meta() | ||||||
|  |  | ||||||
| 			if itemstack:get_metadata() == "" then | 			if itemstack:get_meta():get_string("") == "" then | ||||||
| 				return | 				return | ||||||
| 			end | 			end | ||||||
|  |  | ||||||
| 			if key_meta:get_string("secret") == "" then | 			if key_meta:get_string("secret") == "" then | ||||||
| 				key_meta:set_string("secret", minetest.parse_json(itemstack:get_metadata()).secret) | 				key_meta:set_string("secret", minetest.parse_json(itemstack:get_meta():get_string("")).secret) | ||||||
| 				itemstack:set_metadata("") | 				itemstack:set_metadata("") | ||||||
| 			end | 			end | ||||||
|  |  | ||||||
| @@ -284,7 +284,7 @@ function default.chest.register_chest(prefixed_name, d) | |||||||
| 			nodenames = {name}, | 			nodenames = {name}, | ||||||
| 			action = function(pos, node) | 			action = function(pos, node) | ||||||
| 				local meta = minetest.get_meta(pos) | 				local meta = minetest.get_meta(pos) | ||||||
| 				meta:set_string("formspec", nil) | 				meta:set_string("formspec", "") | ||||||
| 				local inv = meta:get_inventory() | 				local inv = meta:get_inventory() | ||||||
| 				local list = inv:get_list("default:chest") | 				local list = inv:get_list("default:chest") | ||||||
| 				if list then | 				if list then | ||||||
| @@ -297,9 +297,10 @@ function default.chest.register_chest(prefixed_name, d) | |||||||
| 	end | 	end | ||||||
|  |  | ||||||
| 	-- close opened chests on load | 	-- close opened chests on load | ||||||
|  | 	local modname, chestname = prefixed_name:match("^(:?.-):(.*)$") | ||||||
| 	minetest.register_lbm({ | 	minetest.register_lbm({ | ||||||
| 		label = "close opened chests on load", | 		label = "close opened chests on load", | ||||||
| 		name = "default:close_" .. prefixed_name:gsub(":", "_") .. "_open", | 		name = modname .. ":close_" .. chestname .. "_open", | ||||||
| 		nodenames = {prefixed_name .. "_open"}, | 		nodenames = {prefixed_name .. "_open"}, | ||||||
| 		run_at_every_load = true, | 		run_at_every_load = true, | ||||||
| 		action = function(pos, node) | 		action = function(pos, node) | ||||||
|   | |||||||
| @@ -57,7 +57,7 @@ local function book_on_use(itemstack, user) | |||||||
| 	local page, page_max, lines, string = 1, 1, {}, "" | 	local page, page_max, lines, string = 1, 1, {}, "" | ||||||
|  |  | ||||||
| 	-- Backwards compatibility | 	-- Backwards compatibility | ||||||
| 	local old_data = minetest.deserialize(itemstack:get_metadata()) | 	local old_data = minetest.deserialize(itemstack:get_meta():get_string("")) | ||||||
| 	if old_data then | 	if old_data then | ||||||
| 		meta:from_table({ fields = old_data }) | 		meta:from_table({ fields = old_data }) | ||||||
| 	end | 	end | ||||||
|   | |||||||
| @@ -2,149 +2,149 @@ | |||||||
| -- Sounds | -- Sounds | ||||||
| -- | -- | ||||||
|  |  | ||||||
| function default.node_sound_defaults(table) | function default.node_sound_defaults(tbl) | ||||||
| 	table = table or {} | 	tbl = tbl or {} | ||||||
| 	table.footstep = table.footstep or | 	tbl.footstep = tbl.footstep or | ||||||
| 			{name = "", gain = 1.0} | 			{name = "", gain = 1.0} | ||||||
| 	table.dug = table.dug or | 	tbl.dug = tbl.dug or | ||||||
| 			{name = "default_dug_node", gain = 0.25} | 			{name = "default_dug_node", gain = 0.25} | ||||||
| 	table.place = table.place or | 	tbl.place = tbl.place or | ||||||
| 			{name = "default_place_node_hard", gain = 1.0} | 			{name = "default_place_node_hard", gain = 1.0} | ||||||
| 	return table | 	return tbl | ||||||
| end | end | ||||||
|  |  | ||||||
| function default.node_sound_stone_defaults(table) | function default.node_sound_stone_defaults(tbl) | ||||||
| 	table = table or {} | 	tbl = tbl or {} | ||||||
| 	table.footstep = table.footstep or | 	tbl.footstep = tbl.footstep or | ||||||
| 			{name = "default_hard_footstep", gain = 0.2} | 			{name = "default_hard_footstep", gain = 0.2} | ||||||
| 	table.dug = table.dug or | 	tbl.dug = tbl.dug or | ||||||
| 			{name = "default_hard_footstep", gain = 1.0} | 			{name = "default_hard_footstep", gain = 1.0} | ||||||
| 	default.node_sound_defaults(table) | 	default.node_sound_defaults(tbl) | ||||||
| 	return table | 	return tbl | ||||||
| end | end | ||||||
|  |  | ||||||
| function default.node_sound_dirt_defaults(table) | function default.node_sound_dirt_defaults(tbl) | ||||||
| 	table = table or {} | 	tbl = tbl or {} | ||||||
| 	table.footstep = table.footstep or | 	tbl.footstep = tbl.footstep or | ||||||
| 			{name = "default_dirt_footstep", gain = 0.25} | 			{name = "default_dirt_footstep", gain = 0.25} | ||||||
| 	table.dig = table.dig or | 	tbl.dig = tbl.dig or | ||||||
| 			{name = "default_dig_crumbly", gain = 0.4} | 			{name = "default_dig_crumbly", gain = 0.4} | ||||||
| 	table.dug = table.dug or | 	tbl.dug = tbl.dug or | ||||||
| 			{name = "default_dirt_footstep", gain = 1.0} | 			{name = "default_dirt_footstep", gain = 1.0} | ||||||
| 	table.place = table.place or | 	tbl.place = tbl.place or | ||||||
| 			{name = "default_place_node", gain = 1.0} | 			{name = "default_place_node", gain = 1.0} | ||||||
| 	default.node_sound_defaults(table) | 	default.node_sound_defaults(tbl) | ||||||
| 	return table | 	return tbl | ||||||
| end | end | ||||||
|  |  | ||||||
| function default.node_sound_sand_defaults(table) | function default.node_sound_sand_defaults(tbl) | ||||||
| 	table = table or {} | 	tbl = tbl or {} | ||||||
| 	table.footstep = table.footstep or | 	tbl.footstep = tbl.footstep or | ||||||
| 			{name = "default_sand_footstep", gain = 0.05} | 			{name = "default_sand_footstep", gain = 0.05} | ||||||
| 	table.dug = table.dug or | 	tbl.dug = tbl.dug or | ||||||
| 			{name = "default_sand_footstep", gain = 0.15} | 			{name = "default_sand_footstep", gain = 0.15} | ||||||
| 	table.place = table.place or | 	tbl.place = tbl.place or | ||||||
| 			{name = "default_place_node", gain = 1.0} | 			{name = "default_place_node", gain = 1.0} | ||||||
| 	default.node_sound_defaults(table) | 	default.node_sound_defaults(tbl) | ||||||
| 	return table | 	return tbl | ||||||
| end | end | ||||||
|  |  | ||||||
| function default.node_sound_gravel_defaults(table) | function default.node_sound_gravel_defaults(tbl) | ||||||
| 	table = table or {} | 	tbl = tbl or {} | ||||||
| 	table.footstep = table.footstep or | 	tbl.footstep = tbl.footstep or | ||||||
| 			{name = "default_gravel_footstep", gain = 0.25} | 			{name = "default_gravel_footstep", gain = 0.25} | ||||||
| 	table.dig = table.dig or | 	tbl.dig = tbl.dig or | ||||||
| 			{name = "default_gravel_dig", gain = 0.35} | 			{name = "default_gravel_dig", gain = 0.35} | ||||||
| 	table.dug = table.dug or | 	tbl.dug = tbl.dug or | ||||||
| 			{name = "default_gravel_dug", gain = 1.0} | 			{name = "default_gravel_dug", gain = 1.0} | ||||||
| 	table.place = table.place or | 	tbl.place = tbl.place or | ||||||
| 			{name = "default_place_node", gain = 1.0} | 			{name = "default_place_node", gain = 1.0} | ||||||
| 	default.node_sound_defaults(table) | 	default.node_sound_defaults(tbl) | ||||||
| 	return table | 	return tbl | ||||||
| end | end | ||||||
|  |  | ||||||
| function default.node_sound_wood_defaults(table) | function default.node_sound_wood_defaults(tbl) | ||||||
| 	table = table or {} | 	tbl = tbl or {} | ||||||
| 	table.footstep = table.footstep or | 	tbl.footstep = tbl.footstep or | ||||||
| 			{name = "default_wood_footstep", gain = 0.15} | 			{name = "default_wood_footstep", gain = 0.15} | ||||||
| 	table.dig = table.dig or | 	tbl.dig = tbl.dig or | ||||||
| 			{name = "default_dig_choppy", gain = 0.4} | 			{name = "default_dig_choppy", gain = 0.4} | ||||||
| 	table.dug = table.dug or | 	tbl.dug = tbl.dug or | ||||||
| 			{name = "default_wood_footstep", gain = 1.0} | 			{name = "default_wood_footstep", gain = 1.0} | ||||||
| 	default.node_sound_defaults(table) | 	default.node_sound_defaults(tbl) | ||||||
| 	return table | 	return tbl | ||||||
| end | end | ||||||
|  |  | ||||||
| function default.node_sound_leaves_defaults(table) | function default.node_sound_leaves_defaults(tbl) | ||||||
| 	table = table or {} | 	tbl = tbl or {} | ||||||
| 	table.footstep = table.footstep or | 	tbl.footstep = tbl.footstep or | ||||||
| 			{name = "default_grass_footstep", gain = 0.45} | 			{name = "default_grass_footstep", gain = 0.45} | ||||||
| 	table.dug = table.dug or | 	tbl.dug = tbl.dug or | ||||||
| 			{name = "default_grass_footstep", gain = 0.7} | 			{name = "default_grass_footstep", gain = 0.7} | ||||||
| 	table.place = table.place or | 	tbl.place = tbl.place or | ||||||
| 			{name = "default_place_node", gain = 1.0} | 			{name = "default_place_node", gain = 1.0} | ||||||
| 	default.node_sound_defaults(table) | 	default.node_sound_defaults(tbl) | ||||||
| 	return table | 	return tbl | ||||||
| end | end | ||||||
|  |  | ||||||
| function default.node_sound_glass_defaults(table) | function default.node_sound_glass_defaults(tbl) | ||||||
| 	table = table or {} | 	tbl = tbl or {} | ||||||
| 	table.footstep = table.footstep or | 	tbl.footstep = tbl.footstep or | ||||||
| 			{name = "default_glass_footstep", gain = 0.3} | 			{name = "default_glass_footstep", gain = 0.3} | ||||||
| 	table.dig = table.dig or | 	tbl.dig = tbl.dig or | ||||||
| 			{name = "default_glass_footstep", gain = 0.5} | 			{name = "default_glass_footstep", gain = 0.5} | ||||||
| 	table.dug = table.dug or | 	tbl.dug = tbl.dug or | ||||||
| 			{name = "default_break_glass", gain = 1.0} | 			{name = "default_break_glass", gain = 1.0} | ||||||
| 	default.node_sound_defaults(table) | 	default.node_sound_defaults(tbl) | ||||||
| 	return table | 	return tbl | ||||||
| end | end | ||||||
|  |  | ||||||
| function default.node_sound_ice_defaults(table) | function default.node_sound_ice_defaults(tbl) | ||||||
| 	table = table or {} | 	tbl = tbl or {} | ||||||
| 	table.footstep = table.footstep or | 	tbl.footstep = tbl.footstep or | ||||||
| 			{name = "default_ice_footstep", gain = 0.15} | 			{name = "default_ice_footstep", gain = 0.15} | ||||||
| 	table.dig = table.dig or | 	tbl.dig = tbl.dig or | ||||||
| 			{name = "default_ice_dig", gain = 0.5} | 			{name = "default_ice_dig", gain = 0.5} | ||||||
| 	table.dug = table.dug or | 	tbl.dug = tbl.dug or | ||||||
| 			{name = "default_ice_dug", gain = 0.5} | 			{name = "default_ice_dug", gain = 0.5} | ||||||
| 	default.node_sound_defaults(table) | 	default.node_sound_defaults(tbl) | ||||||
| 	return table | 	return tbl | ||||||
| end | end | ||||||
|  |  | ||||||
| function default.node_sound_metal_defaults(table) | function default.node_sound_metal_defaults(tbl) | ||||||
| 	table = table or {} | 	tbl = tbl or {} | ||||||
| 	table.footstep = table.footstep or | 	tbl.footstep = tbl.footstep or | ||||||
| 			{name = "default_metal_footstep", gain = 0.2} | 			{name = "default_metal_footstep", gain = 0.2} | ||||||
| 	table.dig = table.dig or | 	tbl.dig = tbl.dig or | ||||||
| 			{name = "default_dig_metal", gain = 0.5} | 			{name = "default_dig_metal", gain = 0.5} | ||||||
| 	table.dug = table.dug or | 	tbl.dug = tbl.dug or | ||||||
| 			{name = "default_dug_metal", gain = 0.5} | 			{name = "default_dug_metal", gain = 0.5} | ||||||
| 	table.place = table.place or | 	tbl.place = tbl.place or | ||||||
| 			{name = "default_place_node_metal", gain = 0.5} | 			{name = "default_place_node_metal", gain = 0.5} | ||||||
| 	default.node_sound_defaults(table) | 	default.node_sound_defaults(tbl) | ||||||
| 	return table | 	return tbl | ||||||
| end | end | ||||||
|  |  | ||||||
| function default.node_sound_water_defaults(table) | function default.node_sound_water_defaults(tbl) | ||||||
| 	table = table or {} | 	tbl = tbl or {} | ||||||
| 	table.footstep = table.footstep or | 	tbl.footstep = tbl.footstep or | ||||||
| 			{name = "default_water_footstep", gain = 0.2} | 			{name = "default_water_footstep", gain = 0.2} | ||||||
| 	default.node_sound_defaults(table) | 	default.node_sound_defaults(tbl) | ||||||
| 	return table | 	return tbl | ||||||
| end | end | ||||||
|  |  | ||||||
| function default.node_sound_snow_defaults(table) | function default.node_sound_snow_defaults(tbl) | ||||||
| 	table = table or {} | 	tbl = tbl or {} | ||||||
| 	table.footstep = table.footstep or | 	tbl.footstep = tbl.footstep or | ||||||
| 			{name = "default_snow_footstep", gain = 0.2} | 			{name = "default_snow_footstep", gain = 0.2} | ||||||
| 	table.dig = table.dig or | 	tbl.dig = tbl.dig or | ||||||
| 			{name = "default_snow_footstep", gain = 0.3} | 			{name = "default_snow_footstep", gain = 0.3} | ||||||
| 	table.dug = table.dug or | 	tbl.dug = tbl.dug or | ||||||
| 			{name = "default_snow_footstep", gain = 0.3} | 			{name = "default_snow_footstep", gain = 0.3} | ||||||
| 	table.place = table.place or | 	tbl.place = tbl.place or | ||||||
| 			{name = "default_place_node", gain = 1.0} | 			{name = "default_place_node", gain = 1.0} | ||||||
| 	default.node_sound_defaults(table) | 	default.node_sound_defaults(tbl) | ||||||
| 	return table | 	return tbl | ||||||
| end | end | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -293,15 +293,32 @@ minetest.register_abm({ | |||||||
| -- Dig upwards | -- Dig upwards | ||||||
| -- | -- | ||||||
|  |  | ||||||
| function default.dig_up(pos, node, digger) | local in_dig_up = false | ||||||
|  |  | ||||||
|  | function default.dig_up(pos, node, digger, max_height) | ||||||
|  | 	if in_dig_up then return end -- Do not recurse | ||||||
| 	if digger == nil then return end | 	if digger == nil then return end | ||||||
| 	local np = {x = pos.x, y = pos.y + 1, z = pos.z} | 	max_height = max_height or 100 | ||||||
| 	local nn = minetest.get_node(np) |  | ||||||
| 	if nn.name == node.name then | 	in_dig_up = true | ||||||
| 		minetest.node_dig(np, nn, digger) | 	for y = 1, max_height do | ||||||
|  | 		local up_pos  = vector.offset(pos, 0, y, 0) | ||||||
|  | 		local up_node = minetest.get_node(up_pos) | ||||||
|  | 		if up_node.name ~= node.name then | ||||||
|  | 			break | ||||||
|  | 		end | ||||||
|  | 		if not minetest.node_dig(up_pos, up_node, digger) then | ||||||
|  | 			break | ||||||
|  | 		end | ||||||
| 	end | 	end | ||||||
|  | 	in_dig_up = false | ||||||
| end | end | ||||||
|  |  | ||||||
|  | -- errors are hard to handle, instead we rely on resetting this value the next step | ||||||
|  | minetest.register_globalstep(function() | ||||||
|  | 	in_dig_up = false | ||||||
|  | end) | ||||||
|  |  | ||||||
|  |  | ||||||
| -- | -- | ||||||
| -- Fence registration helper | -- Fence registration helper | ||||||
| @@ -309,14 +326,6 @@ end | |||||||
| local fence_collision_extra = minetest.settings:get_bool("enable_fence_tall") and 3/8 or 0 | local fence_collision_extra = minetest.settings:get_bool("enable_fence_tall") and 3/8 or 0 | ||||||
|  |  | ||||||
| function default.register_fence(name, def) | function default.register_fence(name, def) | ||||||
| 	minetest.register_craft({ |  | ||||||
| 		output = name .. " 4", |  | ||||||
| 		recipe = { |  | ||||||
| 			{ def.material, 'group:stick', def.material }, |  | ||||||
| 			{ def.material, 'group:stick', def.material }, |  | ||||||
| 		} |  | ||||||
| 	}) |  | ||||||
|  |  | ||||||
| 	local fence_texture = "default_fence_overlay.png^" .. def.texture .. | 	local fence_texture = "default_fence_overlay.png^" .. def.texture .. | ||||||
| 			"^default_fence_overlay.png^[makealpha:255,126,126" | 			"^default_fence_overlay.png^[makealpha:255,126,126" | ||||||
| 	-- Allow almost everything to be overridden | 	-- Allow almost everything to be overridden | ||||||
| @@ -364,10 +373,22 @@ function default.register_fence(name, def) | |||||||
| 	-- Always add to the fence group, even if no group provided | 	-- Always add to the fence group, even if no group provided | ||||||
| 	def.groups.fence = 1 | 	def.groups.fence = 1 | ||||||
|  |  | ||||||
|  | 	local material = def.material | ||||||
| 	def.texture = nil | 	def.texture = nil | ||||||
| 	def.material = nil | 	def.material = nil | ||||||
|  |  | ||||||
| 	minetest.register_node(name, def) | 	minetest.register_node(name, def) | ||||||
|  |  | ||||||
|  | 	-- Register crafting recipe, trim away starting colon if any | ||||||
|  | 	if not material then return end | ||||||
|  | 	name = string.gsub(name, "^:", "") | ||||||
|  | 	minetest.register_craft({ | ||||||
|  | 		output = name .. " 4", | ||||||
|  | 		recipe = { | ||||||
|  | 			{ material, 'group:stick', material }, | ||||||
|  | 			{ material, 'group:stick', material }, | ||||||
|  | 		} | ||||||
|  | 	}) | ||||||
| end | end | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -376,15 +397,6 @@ end | |||||||
| -- | -- | ||||||
|  |  | ||||||
| function default.register_fence_rail(name, def) | function default.register_fence_rail(name, def) | ||||||
| 	minetest.register_craft({ |  | ||||||
| 		output = name .. " 16", |  | ||||||
| 		recipe = { |  | ||||||
| 			{ def.material, def.material }, |  | ||||||
| 			{ "", ""}, |  | ||||||
| 			{ def.material, def.material }, |  | ||||||
| 		} |  | ||||||
| 	}) |  | ||||||
|  |  | ||||||
| 	local fence_rail_texture = "default_fence_rail_overlay.png^" .. def.texture .. | 	local fence_rail_texture = "default_fence_rail_overlay.png^" .. def.texture .. | ||||||
| 			"^default_fence_rail_overlay.png^[makealpha:255,126,126" | 			"^default_fence_rail_overlay.png^[makealpha:255,126,126" | ||||||
| 	-- Allow almost everything to be overridden | 	-- Allow almost everything to be overridden | ||||||
| @@ -433,10 +445,23 @@ function default.register_fence_rail(name, def) | |||||||
| 	-- Always add to the fence group, even if no group provided | 	-- Always add to the fence group, even if no group provided | ||||||
| 	def.groups.fence = 1 | 	def.groups.fence = 1 | ||||||
|  |  | ||||||
|  | 	local material = def.material | ||||||
| 	def.texture = nil | 	def.texture = nil | ||||||
| 	def.material = nil | 	def.material = nil | ||||||
|  |  | ||||||
| 	minetest.register_node(name, def) | 	minetest.register_node(name, def) | ||||||
|  |  | ||||||
|  | 	-- Register crafting recipe, trim away starting colon if any | ||||||
|  | 	if not material then return end | ||||||
|  | 	name = string.gsub(name, "^:", "") | ||||||
|  | 	minetest.register_craft({ | ||||||
|  | 		output = name .. " 16", | ||||||
|  | 		recipe = { | ||||||
|  | 			{ material, material }, | ||||||
|  | 			{ "", ""}, | ||||||
|  | 			{ material, material }, | ||||||
|  | 		} | ||||||
|  | 	}) | ||||||
| end | end | ||||||
|  |  | ||||||
| -- | -- | ||||||
| @@ -444,15 +469,6 @@ end | |||||||
| -- | -- | ||||||
|  |  | ||||||
| function default.register_mesepost(name, def) | function default.register_mesepost(name, def) | ||||||
| 	minetest.register_craft({ |  | ||||||
| 		output = name .. " 4", |  | ||||||
| 		recipe = { |  | ||||||
| 			{'', 'default:glass', ''}, |  | ||||||
| 			{'default:mese_crystal', 'default:mese_crystal', 'default:mese_crystal'}, |  | ||||||
| 			{'', def.material, ''}, |  | ||||||
| 		} |  | ||||||
| 	}) |  | ||||||
|  |  | ||||||
| 	local post_texture = def.texture .. "^default_mese_post_light_side.png^[makealpha:0,0,0" | 	local post_texture = def.texture .. "^default_mese_post_light_side.png^[makealpha:0,0,0" | ||||||
| 	local post_texture_dark = def.texture .. "^default_mese_post_light_side_dark.png^[makealpha:0,0,0" | 	local post_texture_dark = def.texture .. "^default_mese_post_light_side_dark.png^[makealpha:0,0,0" | ||||||
| 	-- Allow almost everything to be overridden | 	-- Allow almost everything to be overridden | ||||||
| @@ -480,10 +496,23 @@ function default.register_mesepost(name, def) | |||||||
| 		end | 		end | ||||||
| 	end | 	end | ||||||
|  |  | ||||||
|  | 	local material = def.material | ||||||
| 	def.texture = nil | 	def.texture = nil | ||||||
| 	def.material = nil | 	def.material = nil | ||||||
|  |  | ||||||
| 	minetest.register_node(name, def) | 	minetest.register_node(name, def) | ||||||
|  |  | ||||||
|  | 	-- Register crafting recipe, trim away starting colon if any | ||||||
|  | 	if not material then return end | ||||||
|  | 	name = string.gsub(name, "^:", "") | ||||||
|  | 	minetest.register_craft({ | ||||||
|  | 		output = name .. " 4", | ||||||
|  | 		recipe = { | ||||||
|  | 			{'', 'default:glass', ''}, | ||||||
|  | 			{'default:mese_crystal', 'default:mese_crystal', 'default:mese_crystal'}, | ||||||
|  | 			{'', material, ''}, | ||||||
|  | 		} | ||||||
|  | 	}) | ||||||
| end | end | ||||||
|  |  | ||||||
| -- | -- | ||||||
| @@ -791,7 +820,7 @@ function default.can_interact_with_node(player, pos) | |||||||
| 		local key_meta = item:get_meta() | 		local key_meta = item:get_meta() | ||||||
|  |  | ||||||
| 		if key_meta:get_string("secret") == "" then | 		if key_meta:get_string("secret") == "" then | ||||||
| 			local key_oldmeta = item:get_metadata() | 			local key_oldmeta = item:get_meta():get_string("") | ||||||
| 			if key_oldmeta == "" or not minetest.parse_json(key_oldmeta) then | 			if key_oldmeta == "" or not minetest.parse_json(key_oldmeta) then | ||||||
| 				return false | 				return false | ||||||
| 			end | 			end | ||||||
|   | |||||||
| @@ -134,6 +134,7 @@ local function furnace_node_timer(pos, elapsed) | |||||||
| 	local fuel | 	local fuel | ||||||
|  |  | ||||||
| 	local update = true | 	local update = true | ||||||
|  | 	local items_smelt = 0 | ||||||
| 	while elapsed > 0 and update do | 	while elapsed > 0 and update do | ||||||
| 		update = false | 		update = false | ||||||
|  |  | ||||||
| @@ -171,9 +172,7 @@ local function furnace_node_timer(pos, elapsed) | |||||||
| 					else | 					else | ||||||
| 						dst_full = true | 						dst_full = true | ||||||
| 					end | 					end | ||||||
| 					-- Play cooling sound | 					items_smelt = items_smelt + 1 | ||||||
| 					minetest.sound_play("default_cool_lava", |  | ||||||
| 						{pos = pos, max_hear_distance = 16, gain = 0.07}, true) |  | ||||||
| 				else | 				else | ||||||
| 					-- Item could not be cooked: probably missing fuel | 					-- Item could not be cooked: probably missing fuel | ||||||
| 					update = true | 					update = true | ||||||
| @@ -224,6 +223,11 @@ local function furnace_node_timer(pos, elapsed) | |||||||
| 		elapsed = elapsed - el | 		elapsed = elapsed - el | ||||||
| 	end | 	end | ||||||
|  |  | ||||||
|  | 	if items_smelt > 0 then | ||||||
|  | 		-- Play cooling sound | ||||||
|  | 		minetest.sound_play("default_cool_lava", | ||||||
|  | 			{ pos = pos, max_hear_distance = 16, gain = 0.07 * math.min(items_smelt, 7) }, true) | ||||||
|  | 	end | ||||||
| 	if fuel and fuel_totaltime > fuel.time then | 	if fuel and fuel_totaltime > fuel.time then | ||||||
| 		fuel_totaltime = fuel.time | 		fuel_totaltime = fuel.time | ||||||
| 	end | 	end | ||||||
| @@ -329,7 +333,12 @@ end | |||||||
| -- Node definitions | -- Node definitions | ||||||
| -- | -- | ||||||
|  |  | ||||||
| minetest.register_node("default:furnace", { | local function apply_logger(def) | ||||||
|  | 	default.set_inventory_action_loggers(def, "furnace") | ||||||
|  | 	return def | ||||||
|  | end | ||||||
|  |  | ||||||
|  | minetest.register_node("default:furnace", apply_logger({ | ||||||
| 	description = S("Furnace"), | 	description = S("Furnace"), | ||||||
| 	tiles = { | 	tiles = { | ||||||
| 		"default_furnace_top.png", "default_furnace_bottom.png", | 		"default_furnace_top.png", "default_furnace_bottom.png", | ||||||
| @@ -379,9 +388,9 @@ minetest.register_node("default:furnace", { | |||||||
| 	allow_metadata_inventory_put = allow_metadata_inventory_put, | 	allow_metadata_inventory_put = allow_metadata_inventory_put, | ||||||
| 	allow_metadata_inventory_move = allow_metadata_inventory_move, | 	allow_metadata_inventory_move = allow_metadata_inventory_move, | ||||||
| 	allow_metadata_inventory_take = allow_metadata_inventory_take, | 	allow_metadata_inventory_take = allow_metadata_inventory_take, | ||||||
| }) | })) | ||||||
|  |  | ||||||
| minetest.register_node("default:furnace_active", { | minetest.register_node("default:furnace_active", apply_logger({ | ||||||
| 	description = S("Furnace"), | 	description = S("Furnace"), | ||||||
| 	tiles = { | 	tiles = { | ||||||
| 		"default_furnace_top.png", "default_furnace_bottom.png", | 		"default_furnace_top.png", "default_furnace_bottom.png", | ||||||
| @@ -415,7 +424,7 @@ minetest.register_node("default:furnace_active", { | |||||||
| 	allow_metadata_inventory_put = allow_metadata_inventory_put, | 	allow_metadata_inventory_put = allow_metadata_inventory_put, | ||||||
| 	allow_metadata_inventory_move = allow_metadata_inventory_move, | 	allow_metadata_inventory_move = allow_metadata_inventory_move, | ||||||
| 	allow_metadata_inventory_take = allow_metadata_inventory_take, | 	allow_metadata_inventory_take = allow_metadata_inventory_take, | ||||||
| }) | })) | ||||||
|  |  | ||||||
| minetest.register_craft({ | minetest.register_craft({ | ||||||
| 	output = "default:furnace", | 	output = "default:furnace", | ||||||
|   | |||||||
| @@ -77,3 +77,19 @@ dofile(default_path.."/crafting.lua") | |||||||
| dofile(default_path.."/mapgen.lua") | dofile(default_path.."/mapgen.lua") | ||||||
| dofile(default_path.."/aliases.lua") | dofile(default_path.."/aliases.lua") | ||||||
| dofile(default_path.."/legacy.lua") | dofile(default_path.."/legacy.lua") | ||||||
|  |  | ||||||
|  | -- Smoke test that is run via ./util/test/run.sh | ||||||
|  | if minetest.settings:get_bool("minetest_game_smoke_test") then | ||||||
|  | 	minetest.after(0, function() | ||||||
|  | 		minetest.emerge_area(vector.new(0, 0, 0), vector.new(32, 32, 32)) | ||||||
|  | 		local pos = vector.new(9, 9, 9) | ||||||
|  | 		local function check() | ||||||
|  | 			if minetest.get_node(pos).name ~= "ignore" then | ||||||
|  | 				minetest.request_shutdown() | ||||||
|  | 				return | ||||||
|  | 			end | ||||||
|  | 			minetest.after(0, check) | ||||||
|  | 		end | ||||||
|  | 		check() | ||||||
|  | 	end) | ||||||
|  | end | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| # textdomain: default | # textdomain: default | ||||||
| Locked Chest=Ŝlosita Kesto | Locked Chest=Ŝlosita kesto | ||||||
| Locked Chest (owned by @1)=Ŝlosita Kesto (de @1) | Locked Chest (owned by @1)=Ŝlosita kesto (de @1) | ||||||
| You do not own this chest.=Vi ne posedas ĉi tiun keston. | You do not own this chest.=Vi ne posedas ĉi tiun keston. | ||||||
| a locked chest=ŝlosita kesto | a locked chest=ŝlosita kesto | ||||||
| Chest=Kesto | Chest=Kesto | ||||||
| @@ -15,26 +15,26 @@ The book you were writing to mysteriously disappeared.=La libro, kiun vi skribis | |||||||
| "@1" by @2="@1" per @2 | "@1" by @2="@1" per @2 | ||||||
| Blueberries=Mirteloj | Blueberries=Mirteloj | ||||||
| Book=Libro | Book=Libro | ||||||
| Book with Text=Libro kun Teksto | Book with Text=Libro kun teksto | ||||||
| Bronze Ingot=Bronza Ingoto | Bronze Ingot=Bronza ingoto | ||||||
| Clay Brick=Argila Briko | Clay Brick=Argila briko | ||||||
| Clay Lump=Argila Bulo | Clay Lump=Argila bulo | ||||||
| Coal Lump=Karba Bulo | Coal Lump=Karba bulo | ||||||
| Copper Ingot=Kupra Ingoto | Copper Ingot=Kupra ingoto | ||||||
| Copper Lump=Kupra Bulo | Copper Lump=Kupra bulo | ||||||
| Diamond=Diamanto | Diamond=Diamanto | ||||||
| Flint=Siliko | Flint=Siliko | ||||||
| Gold Ingot=Ora Ingoto | Gold Ingot=Ora ingoto | ||||||
| Gold Lump=Ora Bulo | Gold Lump=Ora bulo | ||||||
| Iron Lump=Fera Bulo | Iron Lump=Fera bulo | ||||||
| Mese Crystal=Mesea Kristalo | Mese Crystal=Mesea kristalo | ||||||
| Mese Crystal Fragment=Mesea Kristala Ero | Mese Crystal Fragment=Mesea kristala ero | ||||||
| Obsidian Shard=Obsidiana Peceto  | Obsidian Shard=Obsidiana peceto | ||||||
| Paper=Papero | Paper=Papero | ||||||
| Steel Ingot=Ŝtala Ingoto | Steel Ingot=Ŝtala ingoto | ||||||
| Stick=Bastono | Stick=Bastono | ||||||
| Tin Ingot=Stana Ingoto | Tin Ingot=Stana ingoto | ||||||
| Tin Lump=Stana Bulo | Tin Lump=Stana bulo | ||||||
| Furnace is empty=Forno estas malplena | Furnace is empty=Forno estas malplena | ||||||
| 100% (output full)=100% (plena eligo) | 100% (output full)=100% (plena eligo) | ||||||
| @1%=@1% | @1%=@1% | ||||||
| @@ -46,175 +46,175 @@ Furnace inactive=Forno ne laboras | |||||||
| Furnace=Forno | Furnace=Forno | ||||||
| Stone=Ŝtono | Stone=Ŝtono | ||||||
| Cobblestone=Pavimŝtono | Cobblestone=Pavimŝtono | ||||||
| Stone Brick=Ŝtona Briko | Stone Brick=Ŝtona briko | ||||||
| Stone Block=Ŝtona Bloko | Stone Block=Ŝtona bloko | ||||||
| Mossy Cobblestone=Muska Pavimŝtono | Mossy Cobblestone=Muska pavimŝtono | ||||||
| Desert Stone=Dezerta Ŝtono | Desert Stone=Dezerta ŝtono | ||||||
| Desert Cobblestone=Dezerta Pavimŝtono | Desert Cobblestone=Dezerta pavimŝtono | ||||||
| Desert Stone Brick=Dezerta Ŝtona Briko | Desert Stone Brick=Dezerta ŝtona briko | ||||||
| Desert Stone Block=Dezerta Ŝtona Bloko | Desert Stone Block=Dezerta ŝtona bloko | ||||||
| Sandstone=Sablaŝtono | Sandstone=Sablaŝtono | ||||||
| Sandstone Brick=Sablaŝtono Briko | Sandstone Brick=Sablaŝtono briko | ||||||
| Sandstone Block=Sablaŝtono Bloko | Sandstone Block=Sablaŝtono bloko | ||||||
| Desert Sandstone=Dezerta Sablaŝtono | Desert Sandstone=Dezerta sablaŝtono | ||||||
| Desert Sandstone Brick=Dezerta Sablaŝtono Briko | Desert Sandstone Brick=Dezerta sablaŝtono briko | ||||||
| Desert Sandstone Block=Dezerta Sablaŝtono Bloko | Desert Sandstone Block=Dezerta sablaŝtono bloko | ||||||
| Silver Sandstone=Arĝenta Sablaŝtono | Silver Sandstone=Arĝenta sablaŝtono | ||||||
| Silver Sandstone Brick=Arĝenta Sablaŝtono Briko | Silver Sandstone Brick=Arĝenta sablaŝtono briko | ||||||
| Silver Sandstone Block=Arĝenta Sablaŝtono Bloko | Silver Sandstone Block=Arĝenta sablaŝtono bloko | ||||||
| Obsidian=Obsidiano | Obsidian=Obsidiano | ||||||
| Obsidian Brick=Obsidiana Briko | Obsidian Brick=Obsidiana briko | ||||||
| Obsidian Block=Obsidiana Bloko | Obsidian Block=Obsidiana bloko | ||||||
| Dirt=Tero | Dirt=Tero | ||||||
| Dirt with Grass=Tero kun Herbo | Dirt with Grass=Tero kun herbo | ||||||
| Dirt with Grass and Footsteps=Tero kun Herbo kaj Piedpaŝoj | Dirt with Grass and Footsteps=Tero kun herbo kaj piedpaŝoj | ||||||
| Dirt with Savanna Grass=Tero kun Savana Herbo | Dirt with Savanna Grass=Tero kun savana herbo | ||||||
| Dirt with Snow=Tero kun Neĝo | Dirt with Snow=Tero kun neĝo | ||||||
| Dirt with Rainforest Litter=Tero kun Pluvarbara Folioj | Dirt with Rainforest Litter=Tero kun pluvarbara folioj | ||||||
| Dirt with Coniferous Litter=Tero kun Koniferaj Folioj | Dirt with Coniferous Litter=Tero kun koniferaj folioj | ||||||
| Savanna Dirt=Savana Tero | Savanna Dirt=Savana tero | ||||||
| Savanna Dirt with Savanna Grass=Savana Tero kun Savana Herbo | Savanna Dirt with Savanna Grass=Savana tero kun savana herbo | ||||||
| Permafrost=Ĉiamfrosto | Permafrost=Ĉiamfrosto | ||||||
| Permafrost with Stones=Ĉiamfrosto kun Ŝtonoj | Permafrost with Stones=Ĉiamfrosto kun ŝtonoj | ||||||
| Permafrost with Moss=Ĉiamfrosto kun Musko | Permafrost with Moss=Ĉiamfrosto kun musko | ||||||
| Sand=Sablo | Sand=Sablo | ||||||
| Desert Sand=Dezerta Sablo | Desert Sand=Dezerta sablo | ||||||
| Silver Sand=Arĝenta Sablo | Silver Sand=Arĝenta sablo | ||||||
| Gravel=Gruzo | Gravel=Gruzo | ||||||
| Clay=Argilo | Clay=Argilo | ||||||
| Snow=Neĝo | Snow=Neĝo | ||||||
| Snow Block=Neĝa Bloko | Snow Block=Neĝa bloko | ||||||
| Ice=Glacio | Ice=Glacio | ||||||
| Cave Ice=Kaverna Glacio | Cave Ice=Kaverna glacio | ||||||
| Apple Tree=Pomarbo | Apple Tree=Pomarbo | ||||||
| Apple Wood Planks=Pomarbaj Lignaj Tabuloj | Apple Wood Planks=Pomarbaj lignaj tabuloj | ||||||
| Apple Tree Sapling=Pomarba Arbido | Apple Tree Sapling=Pomarba arbido | ||||||
| Apple Tree Leaves=Pomarbaj Folioj | Apple Tree Leaves=Pomarbaj folioj | ||||||
| Apple=Pomo | Apple=Pomo | ||||||
| Apple Marker=Poma Marko | Apple Marker=Poma marko | ||||||
| Jungle Tree=Ĝangala Arbo | Jungle Tree=Ĝangala arbo | ||||||
| Jungle Wood Planks=Ĝangalaj Lignaj Tabuloj | Jungle Wood Planks=Ĝangalaj lignaj tabuloj | ||||||
| Jungle Tree Leaves=Ĝangalaj Arbaj Folioj | Jungle Tree Leaves=Ĝangalaj arbaj folioj | ||||||
| Jungle Tree Sapling=Ĝangala Arba Arbido | Jungle Tree Sapling=Ĝangala arba arbido | ||||||
| Emergent Jungle Tree Sapling=Nova Ĝangala Arba Arbido | Emergent Jungle Tree Sapling=Nova ĝangala arba arbido | ||||||
| Pine Tree=Pino | Pine Tree=Pino | ||||||
| Pine Wood Planks=Pinaj Lignaj Tabuloj | Pine Wood Planks=Pinaj lignaj tabuloj | ||||||
| Pine Needles=Pinpingloj | Pine Needles=Pinpingloj | ||||||
| Pine Tree Sapling=Pina Arbido | Pine Tree Sapling=Pina arbido | ||||||
| Acacia Tree=Akacio | Acacia Tree=Akacio | ||||||
| Acacia Wood Planks=Akaciaj Lignaj Tabuloj | Acacia Wood Planks=Akaciaj lignaj tabuloj | ||||||
| Acacia Tree Leaves=Akaciaj Folioj | Acacia Tree Leaves=Akaciaj folioj | ||||||
| Acacia Tree Sapling=Akacia Arbido | Acacia Tree Sapling=Akacia arbido | ||||||
| Aspen Tree=Tremolo | Aspen Tree=Tremolo | ||||||
| Aspen Wood Planks=Tremolaj Lignaj Tabuloj | Aspen Wood Planks=Tremolaj lignaj tabuloj | ||||||
| Aspen Tree Leaves=Tremolaj Folioj | Aspen Tree Leaves=Tremolaj folioj | ||||||
| Aspen Tree Sapling=Tremola Arbido | Aspen Tree Sapling=Tremola arbido | ||||||
| Coal Ore=Karba Minaĵo | Coal Ore=Karba minaĵo | ||||||
| Coal Block=Karba Bloko | Coal Block=Karba bloko | ||||||
| Iron Ore=Fera Minaĵo | Iron Ore=Fera minaĵo | ||||||
| Steel Block=Ŝtala Bloko | Steel Block=Ŝtala bloko | ||||||
| Copper Ore=Kupra Minaĵo | Copper Ore=Kupra minaĵo | ||||||
| Copper Block=Kupra Bloko | Copper Block=Kupra bloko | ||||||
| Tin Ore=Stana Minaĵo | Tin Ore=Stana minaĵo | ||||||
| Tin Block=Stana Bloko | Tin Block=Stana bloko | ||||||
| Bronze Block=Bronza Bloko | Bronze Block=Bronza bloko | ||||||
| Mese Ore=Mesea Minaĵo | Mese Ore=Mesea minaĵo | ||||||
| Mese Block=Mesea Bloko | Mese Block=Mesea bloko | ||||||
| Gold Ore=Ora Minaĵo | Gold Ore=Ora minaĵo | ||||||
| Gold Block=Ora Bloko | Gold Block=Ora bloko | ||||||
| Diamond Ore=Diamanta Minaĵo | Diamond Ore=Diamanta minaĵo | ||||||
| Diamond Block=Diamanta Bloko | Diamond Block=Diamanta bloko | ||||||
| Cactus=Kakto | Cactus=Kakto | ||||||
| Large Cactus Seedling=Granda Kakta Kreskaĵo | Large Cactus Seedling=Granda kakta kreskaĵo | ||||||
| Papyrus=Papiruso | Papyrus=Papiruso | ||||||
| Dry Shrub=Seka Arbetaĵo | Dry Shrub=Seka arbetaĵo | ||||||
| Jungle Grass=Ĝangala Herbo | Jungle Grass=Ĝangala herbo | ||||||
| Grass=Herbo | Grass=Herbo | ||||||
| Savanna Grass=Savana Herbo | Savanna Grass=Savana herbo | ||||||
| Fern=Filiko | Fern=Filiko | ||||||
| Marram Grass=Amofilo | Marram Grass=Amofilo | ||||||
| Bush Stem=Arbateĵa Tubo | Bush Stem=Arbateĵa tubo | ||||||
| Bush Leaves=Arbateĵaj Folioj | Bush Leaves=Arbateĵaj folioj | ||||||
| Bush Sapling=Arbateĵa Arbido | Bush Sapling=Arbateĵa arbido | ||||||
| Blueberry Bush Leaves with Berries=Mirtelaj Arbateĵaj Folioj kaj Beroj | Blueberry Bush Leaves with Berries=Mirtelaj arbateĵaj folioj kaj beroj | ||||||
| Blueberry Bush Leaves=Mirtelaj Arbateĵaj Folioj | Blueberry Bush Leaves=Mirtelaj arbateĵaj folioj | ||||||
| Blueberry Bush Sapling=Mirtela Arbateĵa Arbido | Blueberry Bush Sapling=Mirtela arbateĵa arbido | ||||||
| Acacia Bush Stem=Akacia Arbateĵa Tubo | Acacia Bush Stem=Akacia arbateĵa tubo | ||||||
| Acacia Bush Leaves=Akaciaj Arbateĵaj Folioj | Acacia Bush Leaves=Akaciaj arbateĵaj folioj | ||||||
| Acacia Bush Sapling=Akacia Arbateĵa Arbido | Acacia Bush Sapling=Akacia arbateĵa arbido | ||||||
| Pine Bush Stem=Pina Arbateĵa Tubo | Pine Bush Stem=Pina arbateĵa tubo | ||||||
| Pine Bush Needles=Pinaj Arbateĵaj Pingloj | Pine Bush Needles=Pinaj arbateĵaj pingloj | ||||||
| Pine Bush Sapling=Pina Arbateĵa Arbido | Pine Bush Sapling=Pina arbateĵa arbido | ||||||
| Kelp=Fuko | Kelp=Fuko | ||||||
| Green Coral=Verda Koralo | Green Coral=Verda koralo | ||||||
| Pink Coral=Rozkolora Koralo | Pink Coral=Rozkolora koralo | ||||||
| Cyan Coral=Bluverda Koralo | Cyan Coral=Bluverda koralo | ||||||
| Brown Coral=Bruna Koralo | Brown Coral=Bruna koralo | ||||||
| Orange Coral=Oranĝkolora Koralo | Orange Coral=Oranĝkolora koralo | ||||||
| Coral Skeleton=Korala Framo | Coral Skeleton=Korala framo | ||||||
| Water Source=Akva Fonto | Water Source=Akva fonto | ||||||
| Flowing Water=Flua Akvo | Flowing Water=Flua akvo | ||||||
| River Water Source=Rivera Akva Fonto | River Water Source=Rivera akva fonto | ||||||
| Flowing River Water=Flua Rivera Akvo | Flowing River Water=Flua rivera akvo | ||||||
| Lava Source=Lafa Fonto | Lava Source=Lafa fonto | ||||||
| Flowing Lava=Flua Lafa | Flowing Lava=Flua lafa | ||||||
| Empty Bookshelf=Malplena Librobreto | Empty Bookshelf=Malplena librobreto | ||||||
| Bookshelf (@1 written, @2 empty books)=Librobreto (@1 skriba(j), @2 malplena(j) libro(j)) | Bookshelf (@1 written, @2 empty books)=Librobreto (@1 skriba(j), @2 malplena(j) libro(j)) | ||||||
| Bookshelf=Librobreto | Bookshelf=Librobreto | ||||||
| Text too long=Tro longa teksto | Text too long=Tro longa teksto | ||||||
| "@1"= | "@1"= | ||||||
| Wooden Sign=Ligna Signo | Wooden Sign=Ligna signo | ||||||
| Steel Sign=Ŝtala Signo | Steel Sign=Ŝtala signo | ||||||
| Wooden Ladder=Ligna Ŝtupetaro | Wooden Ladder=Ligna ŝtupetaro | ||||||
| Steel Ladder=Ŝtala Ŝtupetaro | Steel Ladder=Ŝtala ŝtupetaro | ||||||
| Apple Wood Fence=Poma Ligna Barilo | Apple Wood Fence=Poma ligna barilo | ||||||
| Acacia Wood Fence=Akacia Ligna Barilo | Acacia Wood Fence=Akacia ligna barilo | ||||||
| Jungle Wood Fence=Ĝangala Ligna Barilo | Jungle Wood Fence=Ĝangala ligna barilo | ||||||
| Pine Wood Fence=Pina Ligna Barilo | Pine Wood Fence=Pina ligna barilo | ||||||
| Aspen Wood Fence=Tremola Ligna Barilo | Aspen Wood Fence=Tremola ligna barilo | ||||||
| Apple Wood Fence Rail=Poma Ligna Barila Relo | Apple Wood Fence Rail=Poma ligna barila relo | ||||||
| Acacia Wood Fence Rail=Akacia Ligna Barila Relo | Acacia Wood Fence Rail=Akacia ligna barila relo | ||||||
| Jungle Wood Fence Rail=Ĝangala Ligna Barila Relo | Jungle Wood Fence Rail=Ĝangala ligna barila relo | ||||||
| Pine Wood Fence Rail=Pina Ligna Barila Relo | Pine Wood Fence Rail=Pina ligna barila relo | ||||||
| Aspen Wood Fence Rail=Tremola Ligna Barila Relo | Aspen Wood Fence Rail=Tremola ligna barila relo | ||||||
| Glass=Vitro | Glass=Vitro | ||||||
| Obsidian Glass=Obsidiana Vitro | Obsidian Glass=Obsidiana vitro | ||||||
| Brick Block=Brika Bloko | Brick Block=Brika bloko | ||||||
| Mese Lamp=Mesea Lampo | Mese Lamp=Mesea lampo | ||||||
| Apple Wood Mese Post Light=Poma Ligna Mesea Fosta Lampo | Apple Wood Mese Post Light=Poma ligna mesea fosta lampo | ||||||
| Acacia Wood Mese Post Light=Akacia Ligna Mesea Fosta Lampo | Acacia Wood Mese Post Light=Akacia ligna mesea fosta lampo | ||||||
| Jungle Wood Mese Post Light=Ĝangala Ligna Mesea Fosta Lampo | Jungle Wood Mese Post Light=Ĝangala ligna mesea fosta lampo | ||||||
| Pine Wood Mese Post Light=Pina Ligna Mesea Fosta Lampo | Pine Wood Mese Post Light=Pina ligna mesea fosta lampo | ||||||
| Aspen Wood Mese Post Light=Tremola Ligna Mesea Fosta Lampo | Aspen Wood Mese Post Light=Tremola ligna mesea fosta lampo | ||||||
| Cloud=Nubo | Cloud=Nubo | ||||||
| Wooden Pickaxe=Ligna Pioĉo | Wooden Pickaxe=Ligna pioĉo | ||||||
| Stone Pickaxe=Ŝtona Pioĉo | Stone Pickaxe=Ŝtona pioĉo | ||||||
| Bronze Pickaxe=Bronza Pioĉo | Bronze Pickaxe=Bronza pioĉo | ||||||
| Steel Pickaxe=Ŝtala Pioĉo | Steel Pickaxe=Ŝtala pioĉo | ||||||
| Mese Pickaxe=Mesea Pioĉo | Mese Pickaxe=Mesea pioĉo | ||||||
| Diamond Pickaxe=Diamanta Pioĉo | Diamond Pickaxe=Diamanta pioĉo | ||||||
| Wooden Shovel=Ligna Fosilo | Wooden Shovel=Ligna fosilo | ||||||
| Stone Shovel=Ŝtona Fosilo | Stone Shovel=Ŝtona fosilo | ||||||
| Bronze Shovel=Bronza Fosilo | Bronze Shovel=Bronza fosilo | ||||||
| Steel Shovel=Ŝtala Fosilo | Steel Shovel=Ŝtala fosilo | ||||||
| Mese Shovel=Mesea Fosilo | Mese Shovel=Mesea fosilo | ||||||
| Diamond Shovel=Diamanta Fosilo | Diamond Shovel=Diamanta fosilo | ||||||
| Wooden Axe=Ligna Hakilo | Wooden Axe=Ligna hakilo | ||||||
| Stone Axe=Ŝtona Hakilo | Stone Axe=Ŝtona hakilo | ||||||
| Bronze Axe=Bronza Hakilo | Bronze Axe=Bronza hakilo | ||||||
| Steel Axe=Ŝtala Hakilo | Steel Axe=Ŝtala hakilo | ||||||
| Mese Axe=Mesea Hakilo | Mese Axe=Mesea hakilo | ||||||
| Diamond Axe=Diamanta Hakilo | Diamond Axe=Diamanta hakilo | ||||||
| Wooden Sword=Ligna Glavo | Wooden Sword=Ligna glavo | ||||||
| Stone Sword=Ŝtona Glavo | Stone Sword=Ŝtona glavo | ||||||
| Bronze Sword=Bronza Glavo | Bronze Sword=Bronza glavo | ||||||
| Steel Sword=Ŝtala Glavo | Steel Sword=Ŝtala glavo | ||||||
| Mese Sword=Mesea Glavo | Mese Sword=Mesea glavo | ||||||
| Diamond Sword=Diamanta Glavo | Diamond Sword=Diamanta glavo | ||||||
| Torch=Torĉo | Torch=Torĉo | ||||||
| @1 will intersect protection on growth.=@1 sekcos protekton dum kresko. | @1 will intersect protection on growth.=@1 sekcos protekton dum kresko. | ||||||
|  |  | ||||||
|  |  | ||||||
| ##### not used anymore ##### | ##### not used anymore ##### | ||||||
|  |  | ||||||
| Mese Post Light=Mesea Fosta Lampo | Mese Post Light=Mesea fosta lampo | ||||||
|   | |||||||
							
								
								
									
										215
									
								
								mods/default/locale/default.pt.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										215
									
								
								mods/default/locale/default.pt.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,215 @@ | |||||||
|  | # textdomain: default | ||||||
|  | Locked Chest=Baú Trancado | ||||||
|  | Locked Chest (owned by @1)=Baú Trancado (pertence a @1) | ||||||
|  | You do not own this chest.=Você não é dono deste baú. | ||||||
|  | a locked chest=um baú trancado | ||||||
|  | Chest=Baú | ||||||
|  | Write= | ||||||
|  | Read= | ||||||
|  | Title:=Título: | ||||||
|  | Contents:=Conteúdo: | ||||||
|  | Save=Salvar | ||||||
|  | by @1=por @1 | ||||||
|  | Page @1 of @2=Página @1 de @2 | ||||||
|  | The book you were writing to mysteriously disappeared.= | ||||||
|  | "@1" by @2="@1" por @2 | ||||||
|  | Blueberries=Mirtilo | ||||||
|  | Book=Livro | ||||||
|  | Book with Text=Livro com Texto | ||||||
|  | Bronze Ingot=Lingote de Bronze | ||||||
|  | Clay Brick=Tijolo de Argila | ||||||
|  | Clay Lump=Pedaço de Argila | ||||||
|  | Coal Lump=Pedaço de Carvão | ||||||
|  | Copper Ingot=Lingote de Cobre | ||||||
|  | Copper Lump=Pedaço de Cobre | ||||||
|  | Diamond=Diamante | ||||||
|  | Flint=Rocha Sílex | ||||||
|  | Gold Ingot=Lingote de Ouro | ||||||
|  | Gold Lump=Pedaço de Ouro | ||||||
|  | Iron Lump=Pedaço de Ferro | ||||||
|  | Mese Crystal=Cristal de Mese | ||||||
|  | Mese Crystal Fragment=Fragmento de Cristal de Mese | ||||||
|  | Obsidian Shard=Caco de Obsidian | ||||||
|  | Paper=Papel | ||||||
|  | Steel Ingot=Lingote de Aço | ||||||
|  | Stick=Graveto | ||||||
|  | Tin Ingot=Lingote de Estanho | ||||||
|  | Tin Lump=Pedaço de Estanho | ||||||
|  | Furnace is empty=A fornalha está vazia | ||||||
|  | 100% (output full)=100% (saída cheia) | ||||||
|  | @1%=@1% | ||||||
|  | Not cookable=Não pode cozinhar | ||||||
|  | Empty=Vazio | ||||||
|  | Furnace active=Fornalha ativa | ||||||
|  | Furnace inactive=Fornalha inativa | ||||||
|  | (Item: @1; Fuel: @2)=(Item: @1; Combustível: @2) | ||||||
|  | Furnace=Fornalha | ||||||
|  | Stone=Pedra | ||||||
|  | Cobblestone=Pedregulho | ||||||
|  | Stone Brick=Tijolo de Pedra | ||||||
|  | Stone Block=Bloco de Pedra | ||||||
|  | Mossy Cobblestone=Pedregulho Musgoso | ||||||
|  | Desert Stone=Pedra do Deserto | ||||||
|  | Desert Cobblestone=Pedregulho do Deserto | ||||||
|  | Desert Stone Brick=Tijolo de Pedra do Deserto | ||||||
|  | Desert Stone Block=Bloco de Pedra do Deserto | ||||||
|  | Sandstone=Arenito | ||||||
|  | Sandstone Brick=Tijolo de Arenito | ||||||
|  | Sandstone Block=Bloco de Arenito | ||||||
|  | Desert Sandstone=Bloco de Arenito do Deserto | ||||||
|  | Desert Sandstone Brick=Tijolo de Arenito do Deserto | ||||||
|  | Desert Sandstone Block=Bloco de Arenito do Deserto | ||||||
|  | Silver Sandstone=Arenito Prateado | ||||||
|  | Silver Sandstone Brick=Tijolo de Arenito Prateado | ||||||
|  | Silver Sandstone Block=Bloco de Arenito Prateado | ||||||
|  | Obsidian=Obsidiana | ||||||
|  | Obsidian Brick=Tijolo de Obsidiana | ||||||
|  | Obsidian Block=Bloco de Obsidiana | ||||||
|  | Dirt=Terra | ||||||
|  | Dirt with Grass=Terra com Grama | ||||||
|  | Dirt with Grass and Footsteps=Terra com Grama e Pegadas | ||||||
|  | Dirt with Savanna Grass=Terra com Grama da Savana | ||||||
|  | Dirt with Snow=Terra com Neve | ||||||
|  | Dirt with Rainforest Litter=Terra com Serrapilheira Tropical | ||||||
|  | Dirt with Coniferous Litter=Terra com Serrapilheira | ||||||
|  | Savanna Dirt=Terra da Savana | ||||||
|  | Savanna Dirt with Savanna Grass=Terra da Savana com Grama da Savana | ||||||
|  | Permafrost=Terra Congelada | ||||||
|  | Permafrost with Stones=Terra Congelada com Pedras | ||||||
|  | Permafrost with Moss=Terra Congelada com Musgo | ||||||
|  | Sand=Areia | ||||||
|  | Desert Sand=Areia do Deserto | ||||||
|  | Silver Sand=Areia Prateada | ||||||
|  | Gravel=Cascalho | ||||||
|  | Clay=Argila | ||||||
|  | Snow=Neve | ||||||
|  | Snow Block=Bloco de Neve | ||||||
|  | Ice=Gelo | ||||||
|  | Cave Ice=Caverna de Gelo | ||||||
|  | Apple Tree=Macieira | ||||||
|  | Apple Wood Planks=Tábuas de Macieira | ||||||
|  | Apple Tree Sapling=Muda de Macieira | ||||||
|  | Apple Tree Leaves=Folhas de Macieira | ||||||
|  | Apple=Maçã | ||||||
|  | Apple Marker=Marcador de Maçã | ||||||
|  | Jungle Tree=Árvore da Selva | ||||||
|  | Jungle Wood Planks=Tábuas de Árvore da Selva | ||||||
|  | Jungle Tree Leaves=Folhas de Árvore da Selva | ||||||
|  | Jungle Tree Sapling=Muda de Árvore da Selva | ||||||
|  | Emergent Jungle Tree Sapling=Muda Crescida de Árvore da Selva | ||||||
|  | Pine Tree=Pinheiro | ||||||
|  | Pine Wood Planks=Tábuas de Pinheiro | ||||||
|  | Pine Needles=Agulhas de Pinheiro | ||||||
|  | Pine Tree Sapling=Muda de Pinheiro | ||||||
|  | Acacia Tree=Acácia | ||||||
|  | Acacia Wood Planks=Tábuas de Acácia | ||||||
|  | Acacia Tree Leaves=Folhas de Acácia | ||||||
|  | Acacia Tree Sapling=Mudas de Acácia | ||||||
|  | Aspen Tree=Álamo | ||||||
|  | Aspen Wood Planks=Tábuas de Álamo | ||||||
|  | Aspen Tree Leaves=Folhas de Álamo | ||||||
|  | Aspen Tree Sapling=Muda de Álamo | ||||||
|  | Coal Ore=Minério de Carvão | ||||||
|  | Coal Block=Bloco de Carvão | ||||||
|  | Iron Ore=Minério de Ferro | ||||||
|  | Steel Block=Bloco de Aço | ||||||
|  | Copper Ore=Minério de Cobre | ||||||
|  | Copper Block=Bloco de Cobre | ||||||
|  | Tin Ore=Minério de Estanho | ||||||
|  | Tin Block=Bloco de Estanho | ||||||
|  | Bronze Block=Bloco de Bronze | ||||||
|  | Mese Ore=Minério de Mese | ||||||
|  | Mese Block=Bloco de Mese | ||||||
|  | Gold Ore=Minério de Ouro | ||||||
|  | Gold Block=Bloco de Ouro | ||||||
|  | Diamond Ore=Minério de Diamante | ||||||
|  | Diamond Block=Bloco de Diamante | ||||||
|  | Cactus=Cacto | ||||||
|  | Large Cactus Seedling=Grande Muda de Cacto | ||||||
|  | Papyrus=Papiro | ||||||
|  | Dry Shrub=Arbusto Seco | ||||||
|  | Jungle Grass=Grama da Selva | ||||||
|  | Grass=Grama | ||||||
|  | Savanna Grass=Grama da Savana | ||||||
|  | Fern=Samambaia | ||||||
|  | Marram Grass=Grama de Feno | ||||||
|  | Bush Stem=Caule de Arbusto | ||||||
|  | Bush Leaves=Folhas de Arbusto | ||||||
|  | Bush Sapling=Muda de Arbusto | ||||||
|  | Blueberry Bush Leaves with Berries=Folhas de Arbusto de Mirtilo com Bagas | ||||||
|  | Blueberry Bush Leaves=Folhas de Arbusto de Mirtilo | ||||||
|  | Blueberry Bush Sapling=Muda de Arbusto de Mirtilo | ||||||
|  | Acacia Bush Stem=Caule de Arbusto de Acácia | ||||||
|  | Acacia Bush Leaves=Folhas de Arbusto de Acácia | ||||||
|  | Acacia Bush Sapling=Muda de Arbusto de Acácia | ||||||
|  | Pine Bush Stem=Caule de Arbusto de Pinheiro | ||||||
|  | Pine Bush Needles=Agulha de Arbusto de Pinheiro | ||||||
|  | Pine Bush Sapling=Muda de Arbusto de Pinheiro | ||||||
|  | Kelp=Alga | ||||||
|  | Green Coral=Coral Verde | ||||||
|  | Pink Coral=Coral Rosa | ||||||
|  | Cyan Coral=Coral Ciano | ||||||
|  | Brown Coral=Coral Marrom | ||||||
|  | Orange Coral=Coral Laranja | ||||||
|  | Coral Skeleton=Esqueleto de Coral | ||||||
|  | Water Source=Fonte de Água | ||||||
|  | Flowing Water=Água Corrente | ||||||
|  | River Water Source=Fonte de Água do Rio | ||||||
|  | Flowing River Water=Água Corrente do Rio | ||||||
|  | Lava Source=Fonte de Lava | ||||||
|  | Flowing Lava=Lava Corrente | ||||||
|  | Empty Bookshelf=Estante de Livros Vazia | ||||||
|  | Bookshelf (@1 written, @2 empty books)=Estante de Livros (@1 livros escritos, @2 livros em branco) | ||||||
|  | Bookshelf=Estante de Livros | ||||||
|  | Text too long=Texto muito longo | ||||||
|  | "@1"="@1" | ||||||
|  | Wooden Sign=Placa de Madeira | ||||||
|  | Steel Sign=Placa de Aço | ||||||
|  | Wooden Ladder=Escada de Madeira | ||||||
|  | Steel Ladder=Escada de Aço | ||||||
|  | Apple Wood Fence=Cerca de Macieira | ||||||
|  | Acacia Wood Fence=Cerca de Acácia | ||||||
|  | Jungle Wood Fence=Cerca de Madeira da Selva | ||||||
|  | Pine Wood Fence=Cerca de Pinheiro | ||||||
|  | Aspen Wood Fence=Cerca de Álamo | ||||||
|  | Apple Wood Fence Rail=Trilho de Cerca de Macieira | ||||||
|  | Acacia Wood Fence Rail=Trilho de Cerca de Acácia | ||||||
|  | Jungle Wood Fence Rail=Trilho de Cerca de Madeira da Selva | ||||||
|  | Pine Wood Fence Rail=Trilho de Cerca de Pinheiro | ||||||
|  | Aspen Wood Fence Rail=Trilho de Cerca de Álamo | ||||||
|  | Glass=Vidro | ||||||
|  | Obsidian Glass=Vidro de Obsidiana | ||||||
|  | Brick Block=Bloco de Tijolos | ||||||
|  | Mese Lamp=Lâmpada de Mese | ||||||
|  | Apple Wood Mese Post Light=Poste de Lâmpada de Mese de Macieira | ||||||
|  | Acacia Wood Mese Post Light=Poste de Lâmpada de Mese de Acácia | ||||||
|  | Jungle Wood Mese Post Light=Poste de Lâmpada de Mese de Madeira da Selva | ||||||
|  | Pine Wood Mese Post Light=Poste de Lâmpada de Mese de Pinheiro | ||||||
|  | Aspen Wood Mese Post Light=Poste de Lâmpada de Mese de Aspen | ||||||
|  | Cloud=Nuvem | ||||||
|  | Wooden Pickaxe=Picareta de Madeira | ||||||
|  | Stone Pickaxe=Picareta de Pedra | ||||||
|  | Bronze Pickaxe=Picareta de Bronze | ||||||
|  | Steel Pickaxe=Picareta de Aço | ||||||
|  | Mese Pickaxe=Picareta de Mese | ||||||
|  | Diamond Pickaxe=Picareta de Diamante | ||||||
|  | Wooden Shovel=Pá de Madeira | ||||||
|  | Stone Shovel=Pá de Pedra | ||||||
|  | Bronze Shovel=Pá de Bronze | ||||||
|  | Steel Shovel=Pá de Aço | ||||||
|  | Mese Shovel=Pá de Mese | ||||||
|  | Diamond Shovel=Pá de Diamante | ||||||
|  | Wooden Axe=Machado de Madeira | ||||||
|  | Stone Axe=Machado de Pedra | ||||||
|  | Bronze Axe=Machado de Bronze | ||||||
|  | Steel Axe=Machado de Aço | ||||||
|  | Mese Axe=Machado de Mese | ||||||
|  | Diamond Axe=Machado de Diamante | ||||||
|  | Wooden Sword=Espada de Madeira | ||||||
|  | Stone Sword=Espada de Pedra | ||||||
|  | Bronze Sword=Espada de Bronze | ||||||
|  | Steel Sword=Espada de Aço | ||||||
|  | Mese Sword=Espada de Mese | ||||||
|  | Diamond Sword=Espada de Diamante | ||||||
|  | Torch=Tocha | ||||||
|  | @1 will intersect protection on growth.=@1 cruzará a proteção no crescimento. | ||||||
| @@ -23,7 +23,7 @@ Coal Lump=Pedaço de Carvão | |||||||
| Copper Ingot=Lingote de Cobre | Copper Ingot=Lingote de Cobre | ||||||
| Copper Lump=Pedaço de Cobre | Copper Lump=Pedaço de Cobre | ||||||
| Diamond=Diamante | Diamond=Diamante | ||||||
| Flint=Sílex (Flint) | Flint=Rocha Sílex | ||||||
| Gold Ingot=Lingote de Ouro | Gold Ingot=Lingote de Ouro | ||||||
| Gold Lump=Pedaço de Ouro | Gold Lump=Pedaço de Ouro | ||||||
| Iron Lump=Pedaço de Ferro | Iron Lump=Pedaço de Ferro | ||||||
|   | |||||||
| @@ -1,42 +1,42 @@ | |||||||
| # textdomain: default | # textdomain: default | ||||||
| Locked Chest=Заблокированный Сундук | Locked Chest=Запертый сундук | ||||||
| Locked Chest (owned by @1)=Заблокированный Сундук (владелец: @1) | Locked Chest (owned by @1)=Запертый сундук (владелец: @1) | ||||||
| You do not own this chest.=Вы не владелец этого сундука. | You do not own this chest.=Вы не владелец этого сундука. | ||||||
| a locked chest=заблокированный сундук | a locked chest=запертый сундук | ||||||
| Chest=Сундук | Chest=Сундук | ||||||
| Write=Писать | Write=Написать | ||||||
| Read=Читать | Read=Читать | ||||||
| Title:=Заголовок: | Title:=Заголовок: | ||||||
| Contents:=Содержимое: | Contents:=Содержимое: | ||||||
| Save=Сохранить | Save=Сохранить | ||||||
| by @1=@1 | by @1=от @1 | ||||||
| Page @1 of @2=Страница @1 из @2 | Page @1 of @2=Страница @1 из @2 | ||||||
| The book you were writing to mysteriously disappeared.=Книга, в которую вы писали, загадочно исчезла. | The book you were writing to mysteriously disappeared.=Книга, которую вы писали, загадочно исчезла. | ||||||
| "@1" by @2="@1" @2 | "@1" by @2="@1" @2 | ||||||
| Blueberries=Черника | Blueberries=Черника | ||||||
| Book=Книга | Book=Книга | ||||||
| Book with Text=Книга с Текстом | Book with Text=Книга с текстом | ||||||
| Bronze Ingot=Бронзовый Слиток | Bronze Ingot=Бронзовый слиток | ||||||
| Clay Brick=Глиняный Кирпич | Clay Brick=Кирпич | ||||||
| Clay Lump=Ком Глины | Clay Lump=Глина | ||||||
| Coal Lump=Кусок Угля | Coal Lump=Уголь | ||||||
| Copper Ingot=Медный Слиток | Copper Ingot=Медный слиток | ||||||
| Copper Lump=Кусок Меди | Copper Lump=Кусок меди | ||||||
| Diamond=Алмаз | Diamond=Алмаз | ||||||
| Flint=Кремень | Flint=Кремень | ||||||
| Gold Ingot=Золотой Слиток | Gold Ingot=Золотой слиток | ||||||
| Gold Lump=Кусок Золота | Gold Lump=Кусок золота | ||||||
| Iron Lump=Кусок Железа | Iron Lump=Кусок железа | ||||||
| Mese Crystal=Кристалл Месе | Mese Crystal=Кристалл мезы | ||||||
| Mese Crystal Fragment=Осколок Кристалла Месе | Mese Crystal Fragment=Осколок кристалла мезы | ||||||
| Obsidian Shard=Обсидиановый Осколок | Obsidian Shard=Обсидиановый осколок | ||||||
| Paper=Бумага | Paper=Бумага | ||||||
| Steel Ingot=Железный Слиток | Steel Ingot=Стальной слиток | ||||||
| Stick=Палка | Stick=Палка | ||||||
| Tin Ingot=Оловянный Слиток | Tin Ingot=Оловянный слиток | ||||||
| Tin Lump=Кусок Олова | Tin Lump=Кусок олова | ||||||
| Furnace is empty=Печь пуста | Furnace is empty=Печь пуста | ||||||
| 100% (output full)=100% (полное приготовление)  | 100% (output full)=100% (выход заполнен) | ||||||
| @1%=@1% | @1%=@1% | ||||||
| Not cookable=Не может быть приготовлено | Not cookable=Не может быть приготовлено | ||||||
| Empty=Пустое | Empty=Пустое | ||||||
| @@ -46,179 +46,170 @@ Furnace inactive=Печь не зажжена | |||||||
| Furnace=Печь | Furnace=Печь | ||||||
| Stone=Камень | Stone=Камень | ||||||
| Cobblestone=Булыжник | Cobblestone=Булыжник | ||||||
| Stone Brick=Каменный Кирпич | Stone Brick=Каменные кирпичи | ||||||
| Stone Block=Каменный Блок | Stone Block=Каменный блок | ||||||
| Mossy Cobblestone=Мшистый Булыжник | Mossy Cobblestone=Замшелый булыжник | ||||||
| Desert Stone=Пустынный Камень | Desert Stone=Пустынный камень | ||||||
| Desert Cobblestone=Пустынный Булыжник | Desert Cobblestone=Пустынный булыжник | ||||||
| Desert Stone Brick=Пустынный Каменный Кирпич | Desert Stone Brick=Пустынный каменные кирпичи | ||||||
| Desert Stone Block=Пустынный Каменный Блок | Desert Stone Block=Пустынный каменный блок | ||||||
| Sandstone=Песчаник | Sandstone=Песчаник | ||||||
| Sandstone Brick=Песчаниковый Кирпич | Sandstone Brick=Песчаниковые кирпичи | ||||||
| Sandstone Block=Песчаниковый Блок | Sandstone Block=Песчаниковый блок | ||||||
| Desert Sandstone=Пустынный Песчаник | Desert Sandstone=Пустынный песчаник | ||||||
| Desert Sandstone Brick=Пустынный Песчаниковый Кирпич | Desert Sandstone Brick=Пустынные песчаниковые кирпичи | ||||||
| Desert Sandstone Block=Пустынный Песчаниковый Блок | Desert Sandstone Block=Пустынный песчаниковый блок | ||||||
| Silver Sandstone=Серебряный Песчаник | Silver Sandstone=Серебристый песчаник | ||||||
| Silver Sandstone Brick=Серебряный Песчаниковый Кирпич | Silver Sandstone Brick=Серебристые песчаниковые кирпичи | ||||||
| Silver Sandstone Block=Серебряный Песчаниковый Блок | Silver Sandstone Block=Серебристый песчаниковый блок | ||||||
| Obsidian=Обсидиан | Obsidian=Обсидиан | ||||||
| Obsidian Brick=Обсидиановый Кирпич | Obsidian Brick=Обсидиановые кирпичи | ||||||
| Obsidian Block=Обсидиановый Блок | Obsidian Block=Обсидиановый блок | ||||||
| Dirt=Земля | Dirt=Земля | ||||||
| Dirt with Grass=Земля с Травой | Dirt with Grass=Дёрн | ||||||
| Dirt with Grass and Footsteps=Земля с Травой и Следами | Dirt with Grass and Footsteps=Дёрн со следами | ||||||
| Dirt with Savanna Grass=Земля с Саванной Травой | Dirt with Savanna Grass=Саванный дёрн | ||||||
| Dirt with Snow=Земля Со Снегом | Dirt with Snow=Земля со снегом | ||||||
| Dirt with Rainforest Litter=Земля с Тропической Подстилкой | Dirt with Rainforest Litter=Земля с тропической подстилкой | ||||||
| Dirt with Coniferous Litter=Земля с Сосновой Подстилкой | Dirt with Coniferous Litter=Земля с сосновой подстилкой | ||||||
| Savanna Dirt=Саванная Земля | Savanna Dirt=Саванная земля | ||||||
| Savanna Dirt with Savanna Grass=Саванная Земля с Травой | Savanna Dirt with Savanna Grass=Саванная земля с саванной травой | ||||||
| Permafrost=Замороженная Почва | Permafrost=Мёрзлая почва | ||||||
| Permafrost with Stones=Замороженная Почва с Камнями | Permafrost with Stones=Мёрзлая почва с камнями | ||||||
| Permafrost with Moss=Замороженная Почва с Мхом | Permafrost with Moss=Мёрзлая почва с мхом | ||||||
| Sand=Песок | Sand=Песок | ||||||
| Desert Sand=Пустынный Песок | Desert Sand=Пустынный песок | ||||||
| Silver Sand=Серебряный Песок | Silver Sand=Серебристый песок | ||||||
| Gravel=Гравий | Gravel=Гравий | ||||||
| Clay=Глиняный Блок | Clay=Глиняный блок | ||||||
| Snow=Снег | Snow=Снежок | ||||||
| Snow Block=Снежный Блок | Snow Block=Снежный блок | ||||||
| Ice=Лёд | Ice=Лёд | ||||||
| Cave Ice=Пещерный Лёд | Cave Ice=Пещерный лёд | ||||||
| Apple Tree=Ствол Яблони | Apple Tree=Яблоневая древесина | ||||||
| Apple Wood Planks=Яблоневые Доски | Apple Wood Planks=Яблоневые доски | ||||||
| Apple Tree Sapling=Саженец Яблони | Apple Tree Sapling=Саженец яблони | ||||||
| Apple Tree Leaves=Яблоневая Листва | Apple Tree Leaves=Яблоневая листва | ||||||
| Apple=Яблоко | Apple=Яблоко | ||||||
| Apple Marker=Яблочная Метка | Apple Marker=Яблочная метка | ||||||
| Jungle Tree=Ствол Тропического Дерева | Jungle Tree=Древесина тропического дерева | ||||||
| Jungle Wood Planks=Доски из Тропического Дерева | Jungle Wood Planks=Доски из тропического дерева | ||||||
| Jungle Tree Leaves=Листва Тропического Дерева | Jungle Tree Leaves=Листва тропического дерева | ||||||
| Jungle Tree Sapling=Саженец Тропического Дерева | Jungle Tree Sapling=Саженец тропического дерева | ||||||
| Emergent Jungle Tree Sapling=Выросший Саженец Тропического Дерева | Emergent Jungle Tree Sapling=Выросший саженец тропического дерева | ||||||
| Pine Tree=Сосновый Ствол | Pine Tree=Сосновая древесина | ||||||
| Pine Wood Planks=Сосновые Доски | Pine Wood Planks=Сосновые доски | ||||||
| Pine Needles=Сосновая Хвоя | Pine Needles=Сосновая хвоя | ||||||
| Pine Tree Sapling=Саженец Сосны | Pine Tree Sapling=Саженец сосны | ||||||
| Acacia Tree=Ствол Акации | Acacia Tree=Акациевая древесина | ||||||
| Acacia Wood Planks=Доски Акации | Acacia Wood Planks=Акациевые доски | ||||||
| Acacia Tree Leaves=Листва Акации | Acacia Tree Leaves=Акациевая листва | ||||||
| Acacia Tree Sapling=Саженец Акации | Acacia Tree Sapling=Саженец акации | ||||||
| Aspen Tree=Ствол Осины | Aspen Tree=Осиновая древесина | ||||||
| Aspen Wood Planks=Осиновые Доски | Aspen Wood Planks=Осиновые доски | ||||||
| Aspen Tree Leaves=Осиновая Листва | Aspen Tree Leaves=Осиновая листва | ||||||
| Aspen Tree Sapling=Саженец Осины | Aspen Tree Sapling=Саженец осины | ||||||
| Coal Ore=Уголь | Coal Ore=Угольная руда | ||||||
| Coal Block=Угольный Блок | Coal Block=Угольный блок | ||||||
| Iron Ore=Железная Руда | Iron Ore=Железная руда | ||||||
| Steel Block=Стальной Блок | Steel Block=Стальной блок | ||||||
| Copper Ore=Медная Руда | Copper Ore=Медная руда | ||||||
| Copper Block=Медный Блок | Copper Block=Медный блок | ||||||
| Tin Ore=Оловянная Руда | Tin Ore=Оловянная руда | ||||||
| Tin Block=Оловянный Блок | Tin Block=Оловянный блок | ||||||
| Bronze Block=Бронзовый Блок | Bronze Block=Бронзовый блок | ||||||
| Mese Ore=Месевая Руда | Mese Ore=Мезовая руда | ||||||
| Mese Block=Месевый Блок | Mese Block=Мезовый блок | ||||||
| Gold Ore=Золотая Руда | Gold Ore=Золотая руда | ||||||
| Gold Block=Золотой Блок | Gold Block=Золотой блок | ||||||
| Diamond Ore=Алмаз | Diamond Ore=Алмазная руда | ||||||
| Diamond Block=Алмазный Блок | Diamond Block=Алмазный блок | ||||||
| Cactus=Кактус | Cactus=Кактус | ||||||
| Large Cactus Seedling=Саженец Кактуса | Large Cactus Seedling=Саженец кактуса | ||||||
| Papyrus=Папирус | Papyrus=Папирус | ||||||
| Dry Shrub=Сухой Куст | Dry Shrub=Сухой куст | ||||||
| Jungle Grass=Тропическая Трава | Jungle Grass=Тропическая трава | ||||||
| Grass=Трава | Grass=Трава | ||||||
| Savanna Grass=Саванная Трава | Savanna Grass=Саванная трава | ||||||
| Fern=Папоротник | Fern=Папоротник | ||||||
| Marram Grass=Песколюб | Marram Grass=Песколюб | ||||||
| Bush Stem=Стебли Куста | Bush Stem=Стебель куста | ||||||
| Bush Leaves=Листья Куста | Bush Leaves=Листья куста | ||||||
| Bush Sapling=Саженец Куста | Bush Sapling=Саженец куста | ||||||
| Blueberry Bush Leaves with Berries=Куст Черники с Ягодами | Blueberry Bush Leaves with Berries=Черничный куст с ягодами | ||||||
| Blueberry Bush Leaves=Куст Черники | Blueberry Bush Leaves=Листья черничного куста | ||||||
| Blueberry Bush Sapling=Саженец Куста Черники | Blueberry Bush Sapling=Саженец черничного куста | ||||||
| Acacia Bush Stem=Стебли Куста Акации | Acacia Bush Stem=Стебель куста акации | ||||||
| Acacia Bush Leaves=Листья Куста Акации | Acacia Bush Leaves=Листья куста акации | ||||||
| Acacia Bush Sapling=Саженец Куста Акации | Acacia Bush Sapling=Саженец куста акации | ||||||
| Pine Bush Stem=Стебли Хвойного Куста | Pine Bush Stem=Стебли хвойного куста | ||||||
| Pine Bush Needles=Хвоя Куста | Pine Bush Needles=Хвоя куста | ||||||
| Pine Bush Sapling=Саженец Хвойного Куста | Pine Bush Sapling=Саженец хвойного куста | ||||||
| Kelp=Ламинария | Kelp=Ламинария | ||||||
| Green Coral=Зеленый Коралл | Green Coral=Зелёный коралл | ||||||
| Pink Coral=Розовый Коралл | Pink Coral=Розовый коралл | ||||||
| Cyan Coral=Голубой Коралл | Cyan Coral=Бирюзовый коралл | ||||||
| Brown Coral=Коричневый Коралл | Brown Coral=Коричневый коралл | ||||||
| Orange Coral=Оранжевый Коралл | Orange Coral=Оранжевый коралл | ||||||
| Coral Skeleton=Коралловый Остов | Coral Skeleton=Коралловый остов | ||||||
| Water Source=Водный Источник | Water Source=Источник воды | ||||||
| Flowing Water=Текущая Вода | Flowing Water=Текущая вода | ||||||
| River Water Source=Речной Водный Источник | River Water Source=Источник речной воды | ||||||
| Flowing River Water=Текущая Речная Вода | Flowing River Water=Текущая речная вода | ||||||
| Lava Source=Лавовый Источник | Lava Source=Источник лавы | ||||||
| Flowing Lava=Текущая Лава | Flowing Lava=Текущая лава | ||||||
| Empty Bookshelf=Пустая Книжная Полка | Empty Bookshelf=Пустая книжная полка | ||||||
| Bookshelf (@1 written, @2 empty books)=Книжная Полка (@1 написано, @2 чистые книги) | Bookshelf (@1 written, @2 empty books)=Книжная полка (@1 написано, @2 чистые книги) | ||||||
| Bookshelf=Книжная Полка | Bookshelf=Книжная полка | ||||||
| Text too long=Текст слишком длинный | Text too long=Текст слишком длинный | ||||||
| "@1"="@1" | "@1"="@1" | ||||||
| Wooden Sign=Деревянная Табличка | Wooden Sign=Деревянная табличка | ||||||
| Steel Sign=Стальная Табличка | Steel Sign=Стальная табличка | ||||||
| Wooden Ladder=Деревянная Лестница | Wooden Ladder=Деревянная лестница | ||||||
| Steel Ladder=Стальная Лестница | Steel Ladder=Стальная лестница | ||||||
| Apple Wood Fence=Яблоневый Деревянный Забор | Apple Wood Fence=Яблоневый забор | ||||||
| Acacia Wood Fence=Деревянный Забор Из Акации | Acacia Wood Fence=Акациевый забор | ||||||
| Jungle Wood Fence=Деревянный Забор Из Тропического Дерева | Jungle Wood Fence=Забор из тропического дерева | ||||||
| Pine Wood Fence=Сосновый Деревянный Забор | Pine Wood Fence=Сосновый забор | ||||||
| Aspen Wood Fence=Осиновый Деревянный Забор | Aspen Wood Fence=Осиновый забор | ||||||
| Apple Wood Fence Rail=Яблоневый Деревянный Реечный Забор | Apple Wood Fence Rail=Яблоневый реечный забор | ||||||
| Acacia Wood Fence Rail=Деревянный Реечный Забор Из Акации | Acacia Wood Fence Rail=Акациевый реечный забор | ||||||
| Jungle Wood Fence Rail=Деревянный Реечный Забор Из Тропического Дерева | Jungle Wood Fence Rail=Реечный забор из тропического дерева | ||||||
| Pine Wood Fence Rail=Сосновый Деревянный Реечный Забор | Pine Wood Fence Rail=Сосновый реечный забор | ||||||
| Aspen Wood Fence Rail=Осиновый Деревянный Реечный Забор | Aspen Wood Fence Rail=Осиновый реечный забор | ||||||
| Glass=Стекло | Glass=Стекло | ||||||
| Obsidian Glass=Обсидиановое Стекло | Obsidian Glass=Обсидиановое стекло | ||||||
| Brick Block=Кирпичный Блок | Brick Block=Кирпичи | ||||||
| Mese Lamp=Месе Лампа | Mese Lamp=Мезовая лампа | ||||||
| Apple Wood Mese Post Light=Столбовой Месе светильник из Яблони | Apple Wood Mese Post Light=Яблоневый уличный фонарь | ||||||
| Acacia Wood Mese Post Light=Столбовой Месе светильник из Акации | Acacia Wood Mese Post Light=Акациевый уличный фонарь | ||||||
| Jungle Wood Mese Post Light=Столбовой Месе светильник из Тропического дерева | Jungle Wood Mese Post Light=Уличный фонарь из тропического дерева | ||||||
| Pine Wood Mese Post Light=Столбовой Месе светильник из Сосны | Pine Wood Mese Post Light=Сосновый уличный фонарь | ||||||
| Aspen Wood Mese Post Light=Столбовой Месе светильник из Осины | Aspen Wood Mese Post Light=Осиновый уличный фонарь | ||||||
| Cloud=Облако | Cloud=Облако | ||||||
| Wooden Pickaxe=Деревянная Кирка | Wooden Pickaxe=Деревянная кирка | ||||||
| Stone Pickaxe=Каменная Кирка | Stone Pickaxe=Каменная кирка | ||||||
| Bronze Pickaxe=Бронзовая Кирка | Bronze Pickaxe=Бронзовая кирка | ||||||
| Steel Pickaxe=Стальная Кирка | Steel Pickaxe=Стальная кирка | ||||||
| Mese Pickaxe=Месе Кирка | Mese Pickaxe=Мезовая кирка | ||||||
| Diamond Pickaxe=Алмазная Кирка | Diamond Pickaxe=Алмазная кирка | ||||||
| Wooden Shovel=Деревянная Лопата | Wooden Shovel=Деревянная лопата | ||||||
| Stone Shovel=Каменная Лопата | Stone Shovel=Каменная лопата | ||||||
| Bronze Shovel=Бронзовая Лопата | Bronze Shovel=Бронзовая лопата | ||||||
| Steel Shovel=Стальная Лопата | Steel Shovel=Стальная лопата | ||||||
| Mese Shovel=Месе Лопата | Mese Shovel=Мезовая лопата | ||||||
| Diamond Shovel=Алмазная Лопата | Diamond Shovel=Алмазная лопата | ||||||
| Wooden Axe=Деревянный Топор | Wooden Axe=Деревянный топор | ||||||
| Stone Axe=Каменный Топор | Stone Axe=Каменный топор | ||||||
| Bronze Axe=Бронзовый Топор | Bronze Axe=Бронзовый топор | ||||||
| Steel Axe=Стальной Топор | Steel Axe=Стальной топор | ||||||
| Mese Axe=Месе Топор | Mese Axe=Мезовый топор | ||||||
| Diamond Axe=Алмазный Топор | Diamond Axe=Алмазный топор | ||||||
| Wooden Sword=Деревянный Меч | Wooden Sword=Деревянный меч | ||||||
| Stone Sword=Каменный Меч | Stone Sword=Каменный меч | ||||||
| Bronze Sword=Бронзовый Меч | Bronze Sword=Бронзовый меч | ||||||
| Steel Sword=Стальной Меч | Steel Sword=Стальной меч | ||||||
| Mese Sword=Месе Меч | Mese Sword=Мезовый меч | ||||||
| Diamond Sword=Алмазный Меч | Diamond Sword=Алмазный меч | ||||||
| Torch=Факел | Torch=Факел | ||||||
| @1 will intersect protection on growth.=@1 пересечёт защиту по росту. | @1 will intersect protection on growth.=@1 пересечет защищённую зону при вырастании. | ||||||
|  |  | ||||||
|  |  | ||||||
| ##### not used anymore ##### |  | ||||||
|  |  | ||||||
| Dirt with Dry Grass=Земля с Сухой Травой |  | ||||||
| Dry Dirt=Сухая Земля |  | ||||||
| Dry Dirt with Dry Grass=Сухая Земля с Сухой Травой |  | ||||||
| Dry Grass=Сухая Трава |  | ||||||
| Mese Post Light=Столб с Месе Фонарем |  | ||||||
| @@ -1985,8 +1985,8 @@ minetest.register_node("default:sand_with_kelp", { | |||||||
|  |  | ||||||
| 	on_place = function(itemstack, placer, pointed_thing) | 	on_place = function(itemstack, placer, pointed_thing) | ||||||
| 		-- Call on_rightclick if the pointed node defines it | 		-- Call on_rightclick if the pointed node defines it | ||||||
| 		if pointed_thing.type == "node" and placer and | 		if pointed_thing.type == "node" and not (placer and placer:is_player() | ||||||
| 				not placer:get_player_control().sneak then | 				and placer:get_player_control().sneak) then | ||||||
| 			local node_ptu = minetest.get_node(pointed_thing.under) | 			local node_ptu = minetest.get_node(pointed_thing.under) | ||||||
| 			local def_ptu = minetest.registered_nodes[node_ptu.name] | 			local def_ptu = minetest.registered_nodes[node_ptu.name] | ||||||
| 			if def_ptu and def_ptu.on_rightclick then | 			if def_ptu and def_ptu.on_rightclick then | ||||||
| @@ -2035,19 +2035,20 @@ minetest.register_node("default:sand_with_kelp", { | |||||||
| -- | -- | ||||||
|  |  | ||||||
| local function coral_on_place(itemstack, placer, pointed_thing) | local function coral_on_place(itemstack, placer, pointed_thing) | ||||||
| 	if pointed_thing.type ~= "node" or not placer then | 	if pointed_thing.type ~= "node" then | ||||||
| 		return itemstack | 		return itemstack | ||||||
| 	end | 	end | ||||||
|  |  | ||||||
| 	local player_name = placer:get_player_name() | 	local player_name = placer and placer:get_player_name() | ||||||
| 	local pos_under = pointed_thing.under | 	local pos_under = pointed_thing.under | ||||||
| 	local pos_above = pointed_thing.above | 	local pos_above = pointed_thing.above | ||||||
| 	local node_under = minetest.get_node(pos_under) | 	local node_under = minetest.get_node(pos_under) | ||||||
| 	local def_under = minetest.registered_nodes[node_under.name] | 	local def_under = minetest.registered_nodes[node_under.name] | ||||||
|  |  | ||||||
| 	if def_under and def_under.on_rightclick and not placer:get_player_control().sneak then | 	if def_under and def_under.on_rightclick and not ( | ||||||
|  | 		placer and placer:is_player() and placer:get_player_control().sneak) then | ||||||
| 		return def_under.on_rightclick(pos_under, node_under, | 		return def_under.on_rightclick(pos_under, node_under, | ||||||
| 				placer, itemstack, pointed_thing) or itemstack | 				placer, itemstack, pointed_thing) | ||||||
| 	end | 	end | ||||||
|  |  | ||||||
| 	if node_under.name ~= "default:coral_skeleton" or | 	if node_under.name ~= "default:coral_skeleton" or | ||||||
| @@ -2057,9 +2058,6 @@ local function coral_on_place(itemstack, placer, pointed_thing) | |||||||
|  |  | ||||||
| 	if minetest.is_protected(pos_under, player_name) or | 	if minetest.is_protected(pos_under, player_name) or | ||||||
| 			minetest.is_protected(pos_above, player_name) then | 			minetest.is_protected(pos_above, player_name) then | ||||||
| 		default.log_player_action(placer, |  | ||||||
| 			"tried to place", itemstack:get_name(), |  | ||||||
| 			"at protected position", pos_under) |  | ||||||
| 		minetest.record_protection_violation(pos_under, player_name) | 		minetest.record_protection_violation(pos_under, player_name) | ||||||
| 		return itemstack | 		return itemstack | ||||||
| 	end | 	end | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							| @@ -488,16 +488,15 @@ function default.sapling_on_place(itemstack, placer, pointed_thing, | |||||||
| 			interval) then | 			interval) then | ||||||
| 		minetest.record_protection_violation(pos, player_name) | 		minetest.record_protection_violation(pos, player_name) | ||||||
| 		-- Print extra information to explain | 		-- Print extra information to explain | ||||||
| --		minetest.chat_send_player(player_name, |  | ||||||
| --			itemstack:get_definition().description .. " will intersect protection " .. |  | ||||||
| --			"on growth") |  | ||||||
| 		minetest.chat_send_player(player_name, | 		minetest.chat_send_player(player_name, | ||||||
| 		    S("@1 will intersect protection on growth.", | 		    S("@1 will intersect protection on growth.", | ||||||
| 			itemstack:get_definition().description)) | 			itemstack:get_definition().description)) | ||||||
| 		return itemstack | 		return itemstack | ||||||
| 	end | 	end | ||||||
|  |  | ||||||
| 	default.log_player_action(placer, "places node", sapling_name, "at", pos) | 	if placer then | ||||||
|  | 		default.log_player_action(placer, "places node", sapling_name, "at", pos) | ||||||
|  | 	end | ||||||
|  |  | ||||||
| 	local take_item = not minetest.is_creative_enabled(player_name) | 	local take_item = not minetest.is_creative_enabled(player_name) | ||||||
| 	local newnode = {name = sapling_name} | 	local newnode = {name = sapling_name} | ||||||
|   | |||||||
| @@ -1,18 +1,18 @@ | |||||||
| # textdomain: doors | # textdomain: doors | ||||||
| Hidden Door Segment=Kaŝita Porda Segmento | Hidden Door Segment=Kaŝita porda segmento | ||||||
| Owned by @1=Posedita de @1 | Owned by @1=Posedita de @1 | ||||||
| You do not own this locked door.=Vi ne posedas ĉi tiun ŝlositan pordon. | You do not own this locked door.=Vi ne posedas ĉi tiun ŝlositan pordon. | ||||||
| a locked door=ŝlosita pordo | a locked door=ŝlosita pordo | ||||||
| Wooden Door=Ligna Pordo | Wooden Door=Ligna pordo | ||||||
| Steel Door=Ŝtala Pordo | Steel Door=Ŝtala pordo | ||||||
| Glass Door=Vitra Pordo | Glass Door=Vitra pordo | ||||||
| Obsidian Glass Door=Obsidiana Vitra Pordo | Obsidian Glass Door=Obsidiana vitra pordo | ||||||
| You do not own this trapdoor.=Vi ne posedas ĉi tiun plankpordon. | You do not own this trapdoor.=Vi ne posedas ĉi tiun plankpordon. | ||||||
| a locked trapdoor=ŝlosita plankpordo | a locked trapdoor=ŝlosita plankpordo | ||||||
| Wooden Trapdoor=Ligna Plankpordo | Wooden Trapdoor=Ligna plankpordo | ||||||
| Steel Trapdoor=Ŝtala Plankpordo | Steel Trapdoor=Ŝtala plankpordo | ||||||
| Apple Wood Fence Gate=Poma Ligna Barila Pordo | Apple Wood Fence Gate=Poma ligna barila pordo | ||||||
| Acacia Wood Fence Gate=Akacia Ligna Barila Pordo | Acacia Wood Fence Gate=Akacia ligna barila pordo | ||||||
| Jungle Wood Fence Gate=Ĝangala Ligna Barila Pordo | Jungle Wood Fence Gate=Ĝangala ligna barila pordo | ||||||
| Pine Wood Fence Gate=Pina Ligna Barila Pordo | Pine Wood Fence Gate=Pina ligna barila pordo | ||||||
| Aspen Wood Fence Gate=Tremola Ligna Barila Pordo | Aspen Wood Fence Gate=Tremola ligna barila pordo | ||||||
|   | |||||||
| @@ -1,18 +1,18 @@ | |||||||
| # textdomain: doors | # textdomain: doors | ||||||
| Hidden Door Segment=Спрятанная Часть Двери | Hidden Door Segment=Спрятанная часть двери | ||||||
| Owned by @1=Владелец: @1 | Owned by @1=Владелец: @1 | ||||||
| You do not own this locked door.=Вы не владелец этой заблокированной двери. | You do not own this locked door.=Вы не владелец этой запертой двери. | ||||||
| a locked door=заблокированная дверь | a locked door=запертая дверь | ||||||
| Wooden Door=Деревянная Дверь | Wooden Door=Деревянная дверь | ||||||
| Steel Door=Стальная Дверь | Steel Door=Стальная дверь | ||||||
| Glass Door=Стеклянная Дверь | Glass Door=Стеклянная дверь | ||||||
| Obsidian Glass Door=Дверь Из Обсидианового Стекла | Obsidian Glass Door=Дверь из обсидианового стекла | ||||||
| You do not own this trapdoor.=Вы не владелец этого люка. | You do not own this trapdoor.=Вы не владелец этого люка. | ||||||
| a locked trapdoor=заблокированный люк | a locked trapdoor=запертый люк | ||||||
| Wooden Trapdoor=Деревянный Люк | Wooden Trapdoor=Деревянный люк | ||||||
| Steel Trapdoor=Стальной Люк | Steel Trapdoor=Стальной люк | ||||||
| Apple Wood Fence Gate=Яблоневая Деревянная Калитка | Apple Wood Fence Gate=Яблоневая калитка | ||||||
| Acacia Wood Fence Gate=Деревянная Калитка Из Акации | Acacia Wood Fence Gate=Акациевая калитка | ||||||
| Jungle Wood Fence Gate=Деревянная Калитка Из Тропического Дерева | Jungle Wood Fence Gate=Калитка из тропического дерева | ||||||
| Pine Wood Fence Gate=Сосновая Деревянная Калитка | Pine Wood Fence Gate=Сосновая калитка | ||||||
| Aspen Wood Fence Gate=Осиновая Деревянная Калитка | Aspen Wood Fence Gate=Осиновая калитка | ||||||
|   | |||||||
| @@ -14,7 +14,7 @@ local function random_sample(rand, list, count) | |||||||
| 	return ret | 	return ret | ||||||
| end | end | ||||||
|  |  | ||||||
| local function find_walls(cpos) | local function find_walls(cpos, is_temple) | ||||||
| 	local is_wall = function(node) | 	local is_wall = function(node) | ||||||
| 		return node.name ~= "air" and node.name ~= "ignore" | 		return node.name ~= "air" and node.name ~= "ignore" | ||||||
| 	end | 	end | ||||||
| @@ -55,7 +55,7 @@ local function find_walls(cpos) | |||||||
| 	local biome = minetest.get_biome_data(cpos) | 	local biome = minetest.get_biome_data(cpos) | ||||||
| 	biome = biome and minetest.get_biome_name(biome.biome) or "" | 	biome = biome and minetest.get_biome_name(biome.biome) or "" | ||||||
| 	local type = "normal" | 	local type = "normal" | ||||||
| 	if biome:find("desert") == 1 then | 	if is_temple or biome:find("desert") == 1 then | ||||||
| 		type = "desert" | 		type = "desert" | ||||||
| 	elseif biome:find("sandstone_desert") == 1 then | 	elseif biome:find("sandstone_desert") == 1 then | ||||||
| 		type = "sandstone" | 		type = "sandstone" | ||||||
| @@ -125,6 +125,8 @@ end | |||||||
| minetest.register_on_generated(function(minp, maxp, blockseed) | minetest.register_on_generated(function(minp, maxp, blockseed) | ||||||
| 	local gennotify = minetest.get_mapgen_object("gennotify") | 	local gennotify = minetest.get_mapgen_object("gennotify") | ||||||
| 	local poslist = gennotify["dungeon"] or {} | 	local poslist = gennotify["dungeon"] or {} | ||||||
|  | 	local n_dungeons = #poslist | ||||||
|  | 	-- Add MGv6 desert temples to the list too | ||||||
| 	for _, entry in ipairs(gennotify["temple"] or {}) do | 	for _, entry in ipairs(gennotify["temple"] or {}) do | ||||||
| 		table.insert(poslist, entry) | 		table.insert(poslist, entry) | ||||||
| 	end | 	end | ||||||
| @@ -137,7 +139,7 @@ minetest.register_on_generated(function(minp, maxp, blockseed) | |||||||
| 	-- process at most 8 rooms to keep runtime of this predictable | 	-- process at most 8 rooms to keep runtime of this predictable | ||||||
| 	local num_process = math.min(#poslist, 8) | 	local num_process = math.min(#poslist, 8) | ||||||
| 	for i = 1, num_process do | 	for i = 1, num_process do | ||||||
| 		local room = find_walls(poslist[i]) | 		local room = find_walls(poslist[i], i > n_dungeons) | ||||||
| 		-- skip small rooms and everything that doesn't at least have 3 walls | 		-- skip small rooms and everything that doesn't at least have 3 walls | ||||||
| 		if math.min(room.size.x, room.size.z) >= 4 and #room.walls >= 3 then | 		if math.min(room.size.x, room.size.z) >= 4 and #room.walls >= 3 then | ||||||
| 			table.insert(candidates, room) | 			table.insert(candidates, room) | ||||||
|   | |||||||
| @@ -1,16 +1,16 @@ | |||||||
| # textdomain: dye | # textdomain: dye | ||||||
| White Dye=Blanka Tinkturo | White Dye=Blanka tinkturo | ||||||
| Grey Dye=Griza Tinkturo | Grey Dye=Griza tinkturo | ||||||
| Dark Grey Dye=Malhela Griza Tinkturo | Dark Grey Dye=Malhela griza tinkturo | ||||||
| Black Dye=Nigra Tinkturo | Black Dye=Nigra tinkturo | ||||||
| Violet Dye=Violkolora Tinkturo | Violet Dye=Violkolora tinkturo | ||||||
| Blue Dye=Blua Tinkturo | Blue Dye=Blua tinkturo | ||||||
| Cyan Dye=Bluverda Tinkturo | Cyan Dye=Bluverda tinkturo | ||||||
| Dark Green Dye=Malhela Verda Tinkturo | Dark Green Dye=Malhela verda tinkturo | ||||||
| Green Dye=Verda Tinkturo | Green Dye=Verda tinkturo | ||||||
| Yellow Dye=Flava Tinkturo | Yellow Dye=Flava tinkturo | ||||||
| Brown Dye=Bruna Tinkturo | Brown Dye=Bruna tinkturo | ||||||
| Orange Dye=Oranĝkolora Tinkturo | Orange Dye=Oranĝkolora tinkturo | ||||||
| Red Dye=Ruĝa Tinkturo | Red Dye=Ruĝa tinkturo | ||||||
| Magenta Dye=Fiksina Tinkturo | Magenta Dye=Fiksina tinkturo | ||||||
| Pink Dye=Rozkolora Tinkturo | Pink Dye=Rozkolora tinkturo | ||||||
|   | |||||||
| @@ -1,16 +1,16 @@ | |||||||
| # textdomain: dye | # textdomain: dye | ||||||
| White Dye=Белая Краска | White Dye=Белый краситель | ||||||
| Grey Dye=Серая Краска | Grey Dye=Серый краситель | ||||||
| Dark Grey Dye=Тёмно-Серая Краска | Dark Grey Dye=Тёмно-серый краситель | ||||||
| Black Dye=Черная Краска | Black Dye=Черный краситель | ||||||
| Violet Dye=Фиолетовая Краска | Violet Dye=Фиолетовый краситель | ||||||
| Blue Dye=Синяя Краска | Blue Dye=Синий краситель | ||||||
| Cyan Dye=Голубая Краска | Cyan Dye=Бирюзовый краситель | ||||||
| Dark Green Dye=Тёмно-Зелёная Краска | Dark Green Dye=Тёмно-зелёный краситель | ||||||
| Green Dye=Зелёная Краска | Green Dye=Зелёный краситель | ||||||
| Yellow Dye=Жёлтая Краска | Yellow Dye=Жёлтый краситель | ||||||
| Brown Dye=Бурая Краска | Brown Dye=Коричневый краситель | ||||||
| Orange Dye=Оранжевая Краска | Orange Dye=Оранжевый краситель | ||||||
| Red Dye=Красная Краска | Red Dye=Красный краситель | ||||||
| Magenta Dye=Пурпурная Краска | Magenta Dye=Сиреневый краситель | ||||||
| Pink Dye=Розовая Краска | Pink Dye=Розовый краситель | ||||||
|   | |||||||
| @@ -178,7 +178,9 @@ farming.place_seed = function(itemstack, placer, pointed_thing, plantname) | |||||||
| 	end | 	end | ||||||
|  |  | ||||||
| 	-- add the node and remove 1 item from the itemstack | 	-- add the node and remove 1 item from the itemstack | ||||||
| 	default.log_player_action(placer, "places node", plantname, "at", pt.above) | 	if placer then | ||||||
|  | 		default.log_player_action(placer, "places node", plantname, "at", pt.above) | ||||||
|  | 	end | ||||||
| 	minetest.add_node(pt.above, {name = plantname, param2 = 1}) | 	minetest.add_node(pt.above, {name = plantname, param2 = 1}) | ||||||
| 	tick(pt.above) | 	tick(pt.above) | ||||||
| 	if not minetest.is_creative_enabled(player_name) then | 	if not minetest.is_creative_enabled(player_name) then | ||||||
| @@ -187,6 +189,12 @@ farming.place_seed = function(itemstack, placer, pointed_thing, plantname) | |||||||
| 	return itemstack | 	return itemstack | ||||||
| end | end | ||||||
|  |  | ||||||
|  | -- check if on wet soil | ||||||
|  | farming.can_grow = function(pos) | ||||||
|  | 	local below = minetest.get_node(pos:offset(0, -1, 0)) | ||||||
|  | 	return minetest.get_item_group(below.name, "soil") >= 3 | ||||||
|  | end | ||||||
|  |  | ||||||
| farming.grow_plant = function(pos, elapsed) | farming.grow_plant = function(pos, elapsed) | ||||||
| 	local node = minetest.get_node(pos) | 	local node = minetest.get_node(pos) | ||||||
| 	local name = node.name | 	local name = node.name | ||||||
| @@ -222,9 +230,7 @@ farming.grow_plant = function(pos, elapsed) | |||||||
| 		return | 		return | ||||||
| 	end | 	end | ||||||
|  |  | ||||||
| 	-- check if on wet soil | 	if not (def.can_grow or farming.can_grow)(pos) then | ||||||
| 	local below = minetest.get_node({x = pos.x, y = pos.y - 1, z = pos.z}) |  | ||||||
| 	if minetest.get_item_group(below.name, "soil") < 3 then |  | ||||||
| 		tick_again(pos) | 		tick_again(pos) | ||||||
| 		return | 		return | ||||||
| 	end | 	end | ||||||
|   | |||||||
| @@ -1,28 +1,28 @@ | |||||||
| # textdomain: farming | # textdomain: farming | ||||||
| Hoe=Sarkilo | Hoe=Sarkilo | ||||||
| Seed=Semo | Seed=Semo | ||||||
| Wooden Hoe=Ligna Sarkilo | Wooden Hoe=Ligna sarkilo | ||||||
| Stone Hoe=Ŝtona Sarkilo | Stone Hoe=Ŝtona sarkilo | ||||||
| Steel Hoe=Ŝtala Sarkilo | Steel Hoe=Ŝtala sarkilo | ||||||
| Bronze Hoe=Bronza Sarkilo | Bronze Hoe=Bronza sarkilo | ||||||
| Mese Hoe=Mesea Sarkilo | Mese Hoe=Mesea sarkilo | ||||||
| Diamond Hoe=Diamanta Sarkilo | Diamond Hoe=Diamanta sarkilo | ||||||
| Wheat Seed=Tritika Semo | Wheat Seed=Tritika semo | ||||||
| Wheat=Tritiko | Wheat=Tritiko | ||||||
| Flour=Faruno | Flour=Faruno | ||||||
| Bread=Pano | Bread=Pano | ||||||
| Cotton Seed=Katuna Semo | Cotton Seed=Katuna semo | ||||||
| Cotton=Katuno | Cotton=Katuno | ||||||
| String=Ŝnuro | String=Ŝnuro | ||||||
| Soil=Tero | Soil=Tero | ||||||
| Wet Soil=Malseka Tero | Wet Soil=Malseka tero | ||||||
| Savanna Soil=Savana Tero | Savanna Soil=Savana tero | ||||||
| Wet Savanna Soil=Malseka Savana Tero | Wet Savanna Soil=Malseka savana tero | ||||||
| Desert Sand Soil=Dezerta Sablo Tero | Desert Sand Soil=Dezerta sablo tero | ||||||
| Wet Desert Sand Soil=Malseka Dezerta Sablo Tero | Wet Desert Sand Soil=Malseka dezerta sablo tero | ||||||
| Straw=Pajlo | Straw=Pajlo | ||||||
| Straw Stair=Pajla Ŝtupo | Straw Stair=Pajla ŝtupo | ||||||
| Inner Straw Stair=Interna Pajla Ŝtupo | Inner Straw Stair=Interna pajla ŝtupo | ||||||
| Outer Straw Stair=Ekstera Pajla Ŝtupo | Outer Straw Stair=Ekstera pajla ŝtupo | ||||||
| Straw Slab=Pajla Plato | Straw Slab=Pajla plato | ||||||
| Wild Cotton=Sovaĝa Kotonujo | Wild Cotton=Sovaĝa kotonujo | ||||||
|   | |||||||
							
								
								
									
										28
									
								
								mods/farming/locale/farming.pt.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								mods/farming/locale/farming.pt.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,28 @@ | |||||||
|  | # textdomain: farming | ||||||
|  | Hoe=Enxada | ||||||
|  | Seed=Semente | ||||||
|  | Wooden Hoe=Enxada de Madeira | ||||||
|  | Stone Hoe=Enxada de Pedra | ||||||
|  | Steel Hoe=Enxada de Aço | ||||||
|  | Bronze Hoe=Enxada de Bronze | ||||||
|  | Mese Hoe=Enxada de Mese | ||||||
|  | Diamond Hoe=Enxada de Diamante | ||||||
|  | Wheat Seed=Semente de Trigo | ||||||
|  | Wheat=Trigo | ||||||
|  | Flour=Farinha | ||||||
|  | Bread=Pão | ||||||
|  | Cotton Seed=Semente de Algodão | ||||||
|  | Cotton=Algodão | ||||||
|  | String=Fio | ||||||
|  | Soil=Solo | ||||||
|  | Wet Soil=Solo Molhado | ||||||
|  | Savanna Soil=Solo da Savana | ||||||
|  | Wet Savanna Soil=Solo da Savana Molhado | ||||||
|  | Desert Sand Soil=Solo Arenoso do Deserto | ||||||
|  | Wet Desert Sand Soil=Solo Arenoso do Deserto Molhado | ||||||
|  | Straw=Palha | ||||||
|  | Straw Stair=Escada de Palha | ||||||
|  | Inner Straw Stair=Escada de Palha Externa | ||||||
|  | Outer Straw Stair=Escada de Palha Interna | ||||||
|  | Straw Slab=Laje de Palha | ||||||
|  | Wild Cotton=Algodão Selvagem | ||||||
| @@ -1,34 +1,28 @@ | |||||||
| # textdomain: farming | # textdomain: farming | ||||||
| Hoe=Мотыга | Hoe=Мотыга | ||||||
| Seed=Семя | Seed=Семена | ||||||
| Wooden Hoe=Деревянная Мотыга | Wooden Hoe=Деревянная мотыга | ||||||
| Stone Hoe=Каменная Мотыга | Stone Hoe=Каменная мотыга | ||||||
| Steel Hoe=Стальная Мотыга | Steel Hoe=Стальная мотыга | ||||||
| Bronze Hoe=Бронзовая Мотыга | Bronze Hoe=Бронзовая мотыга | ||||||
| Mese Hoe=Месе Мотыга | Mese Hoe=Мезовая мотыга | ||||||
| Diamond Hoe=Алмазная Мотыга | Diamond Hoe=Алмазная мотыга | ||||||
| Wheat Seed=Семена Пшеницы | Wheat Seed=Семена пшеницы | ||||||
| Wheat=Пшеница | Wheat=Пшеница | ||||||
| Flour=Мука | Flour=Мука | ||||||
| Bread=Хлеб | Bread=Хлеб | ||||||
| Cotton Seed=Семена Хлопчатника | Cotton Seed=Семена хлопчатника | ||||||
| Cotton=Хлопок | Cotton=Хлопок | ||||||
| String=Нить | String=Нить | ||||||
| Soil=Почва | Soil=Почва | ||||||
| Wet Soil=Влажная Почва | Wet Soil=Влажная почва | ||||||
| Savanna Soil=Саванная Почва | Savanna Soil=Саванная почва | ||||||
| Wet Savanna Soil=Влажная Саванная Почва | Wet Savanna Soil=Влажная саванная почва | ||||||
| Desert Sand Soil=Пустынная Песчаная Почва | Desert Sand Soil=Пустынная песчаная почва | ||||||
| Wet Desert Sand Soil=Влажная Пустынная Песчаная Почва | Wet Desert Sand Soil=Влажная пустынная песчаная почва | ||||||
| Straw=Солома | Straw=Солома | ||||||
| Straw Stair=Соломенная Ступень | Straw Stair=Соломенные ступени | ||||||
| Inner Straw Stair=Угловая Соломенная Ступень (Внутренний Угол) | Inner Straw Stair=Внутренние соломенные ступени | ||||||
| Outer Straw Stair=Угловая Соломенная Ступень (Внешний Угол) | Outer Straw Stair=Внешние соломенные ступени | ||||||
| Straw Slab=Соломенная Плита | Straw Slab=Соломенная плита | ||||||
| Wild Cotton=Неокультуренный Хлопчатник | Wild Cotton=Дикий хлопчатник | ||||||
|  |  | ||||||
|  |  | ||||||
| ##### not used anymore ##### |  | ||||||
|  |  | ||||||
| Dry Soil=Сухая Почва |  | ||||||
| Wet Dry Soil=Влажная Сухая Почва |  | ||||||
|   | |||||||
| @@ -101,13 +101,18 @@ minetest.register_tool("fire:flint_and_steel", { | |||||||
| 				return | 				return | ||||||
| 			end | 			end | ||||||
| 			if minetest.is_protected(pointed_thing.under, player_name) then | 			if minetest.is_protected(pointed_thing.under, player_name) then | ||||||
| 				minetest.chat_send_player(player_name, "This area is protected") | 				minetest.record_protection_violation(pointed_thing.under, player_name) | ||||||
| 				return | 				return | ||||||
| 			end | 			end | ||||||
| 			if nodedef.on_ignite then | 			if nodedef.on_ignite then | ||||||
| 				nodedef.on_ignite(pointed_thing.under, user) | 				nodedef.on_ignite(pointed_thing.under, user) | ||||||
| 			elseif minetest.get_item_group(node_under, "flammable") >= 1 | 			elseif minetest.get_item_group(node_under, "flammable") >= 1 | ||||||
| 					and minetest.get_node(pointed_thing.above).name == "air" then | 					and minetest.get_node(pointed_thing.above).name == "air" then | ||||||
|  | 				if minetest.is_protected(pointed_thing.above, player_name) then | ||||||
|  | 					minetest.record_protection_violation(pointed_thing.above, player_name) | ||||||
|  | 					return | ||||||
|  | 				end | ||||||
|  |  | ||||||
| 				minetest.set_node(pointed_thing.above, {name = "fire:basic_flame"}) | 				minetest.set_node(pointed_thing.above, {name = "fire:basic_flame"}) | ||||||
| 			end | 			end | ||||||
| 		end | 		end | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| # textdomain: fire | # textdomain: fire | ||||||
| Fire=Fajro | Fire=Fajro | ||||||
| Permanent Fire=Ĉiama Fajro | Permanent Fire=Ĉiama fajro | ||||||
| Flint and Steel=Siliko kaj Ŝtalo | Flint and Steel=Siliko kaj ŝtalo | ||||||
|   | |||||||
							
								
								
									
										4
									
								
								mods/fire/locale/fire.pt.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mods/fire/locale/fire.pt.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | |||||||
|  | # textdomain: fire | ||||||
|  | Fire=Fogo | ||||||
|  | Permanent Fire=Fogo Permanente | ||||||
|  | Flint and Steel=Pederneira Primitiva | ||||||
| @@ -1,4 +1,4 @@ | |||||||
| # textdomain: fire | # textdomain: fire | ||||||
| Fire=Fogo | Fire=Fogo | ||||||
| Permanent Fire=Fogo Permanente | Permanent Fire=Fogo Permanente | ||||||
| Flint and Steel=Sílex e Fogo | Flint and Steel=Pederneira Primitiva | ||||||
|   | |||||||
| @@ -1,9 +1,4 @@ | |||||||
| # textdomain: fire | # textdomain: fire | ||||||
| Fire=Огонь | Fire=Огонь | ||||||
| Permanent Fire=Вечный Огонь | Permanent Fire=Вечный огонь | ||||||
| Flint and Steel=Огниво | Flint and Steel=Огниво | ||||||
|  |  | ||||||
|  |  | ||||||
| ##### not used anymore ##### |  | ||||||
|  |  | ||||||
| Permanent Flame=Вечный Огонь |  | ||||||
|   | |||||||
| @@ -3,6 +3,8 @@ | |||||||
| -- Load support for MT game translation. | -- Load support for MT game translation. | ||||||
| local S = minetest.get_translator("fireflies") | local S = minetest.get_translator("fireflies") | ||||||
|  |  | ||||||
|  | -- Legacy compatibility, when pointabilities don't exist, pointable is set to true. | ||||||
|  | local pointable_compat = not minetest.features.item_specific_pointabilities | ||||||
|  |  | ||||||
| minetest.register_node("fireflies:firefly", { | minetest.register_node("fireflies:firefly", { | ||||||
| 	description = S("Firefly"), | 	description = S("Firefly"), | ||||||
| @@ -23,6 +25,7 @@ minetest.register_node("fireflies:firefly", { | |||||||
| 	sunlight_propagates = true, | 	sunlight_propagates = true, | ||||||
| 	buildable_to = true, | 	buildable_to = true, | ||||||
| 	walkable = false, | 	walkable = false, | ||||||
|  | 	pointable = pointable_compat, | ||||||
| 	groups = {catchable = 1}, | 	groups = {catchable = 1}, | ||||||
| 	selection_box = { | 	selection_box = { | ||||||
| 		type = "fixed", | 		type = "fixed", | ||||||
| @@ -30,18 +33,8 @@ minetest.register_node("fireflies:firefly", { | |||||||
| 	}, | 	}, | ||||||
| 	light_source = 6, | 	light_source = 6, | ||||||
| 	floodable = true, | 	floodable = true, | ||||||
| 	on_place = function(itemstack, placer, pointed_thing) | 	on_construct = function(pos) | ||||||
| 		local player_name = placer:get_player_name() | 		minetest.get_node_timer(pos):start(1) | ||||||
| 		local pos = pointed_thing.above |  | ||||||
|  |  | ||||||
| 		if not minetest.is_protected(pos, player_name) and |  | ||||||
| 				not minetest.is_protected(pointed_thing.under, player_name) and |  | ||||||
| 				minetest.get_node(pos).name == "air" then |  | ||||||
| 			minetest.set_node(pos, {name = "fireflies:firefly"}) |  | ||||||
| 			minetest.get_node_timer(pos):start(1) |  | ||||||
| 			itemstack:take_item() |  | ||||||
| 		end |  | ||||||
| 		return itemstack |  | ||||||
| 	end, | 	end, | ||||||
| 	on_timer = function(pos, elapsed) | 	on_timer = function(pos, elapsed) | ||||||
| 		if minetest.get_node_light(pos) > 11 then | 		if minetest.get_node_light(pos) > 11 then | ||||||
| @@ -65,18 +58,8 @@ minetest.register_node("fireflies:hidden_firefly", { | |||||||
| 	drop = "", | 	drop = "", | ||||||
| 	groups = {not_in_creative_inventory = 1}, | 	groups = {not_in_creative_inventory = 1}, | ||||||
| 	floodable = true, | 	floodable = true, | ||||||
| 	on_place = function(itemstack, placer, pointed_thing) | 	on_construct = function(pos) | ||||||
| 		local player_name = placer:get_player_name() | 		minetest.get_node_timer(pos):start(1) | ||||||
| 		local pos = pointed_thing.above |  | ||||||
|  |  | ||||||
| 		if not minetest.is_protected(pos, player_name) and |  | ||||||
| 				not minetest.is_protected(pointed_thing.under, player_name) and |  | ||||||
| 				minetest.get_node(pos).name == "air" then |  | ||||||
| 			minetest.set_node(pos, {name = "fireflies:hidden_firefly"}) |  | ||||||
| 			minetest.get_node_timer(pos):start(1) |  | ||||||
| 			itemstack:take_item() |  | ||||||
| 		end |  | ||||||
| 		return itemstack |  | ||||||
| 	end, | 	end, | ||||||
| 	on_timer = function(pos, elapsed) | 	on_timer = function(pos, elapsed) | ||||||
| 		if minetest.get_node_light(pos) <= 11 then | 		if minetest.get_node_light(pos) <= 11 then | ||||||
| @@ -91,27 +74,12 @@ minetest.register_node("fireflies:hidden_firefly", { | |||||||
| minetest.register_tool("fireflies:bug_net", { | minetest.register_tool("fireflies:bug_net", { | ||||||
| 	description = S("Bug Net"), | 	description = S("Bug Net"), | ||||||
| 	inventory_image = "fireflies_bugnet.png", | 	inventory_image = "fireflies_bugnet.png", | ||||||
| 	on_use = function(itemstack, player, pointed_thing) | 	pointabilities = {nodes = {["group:catchable"] = true}}, | ||||||
| 		local player_name = player and player:get_player_name() or "" | 	tool_capabilities = { | ||||||
| 		if not pointed_thing or pointed_thing.type ~= "node" or | 		groupcaps = { | ||||||
| 				minetest.is_protected(pointed_thing.under, player_name) then | 			catchable = { maxlevel = 1, uses = 256, times = { [1] = 0, [2] = 0, [3] = 0 } } | ||||||
| 			return | 		}, | ||||||
| 		end | 	}, | ||||||
| 		local node_name = minetest.get_node(pointed_thing.under).name |  | ||||||
| 		local inv = player:get_inventory() |  | ||||||
| 		if minetest.get_item_group(node_name, "catchable") == 1 then |  | ||||||
| 			minetest.set_node(pointed_thing.under, {name = "air"}) |  | ||||||
| 			local stack = ItemStack(node_name.." 1") |  | ||||||
| 			local leftover = inv:add_item("main", stack) |  | ||||||
| 			if leftover:get_count() > 0 then |  | ||||||
| 				minetest.add_item(pointed_thing.under, node_name.." 1") |  | ||||||
| 			end |  | ||||||
| 		end |  | ||||||
| 		if not minetest.is_creative_enabled(player_name) then |  | ||||||
| 			itemstack:add_wear_by_uses(256) |  | ||||||
| 			return itemstack |  | ||||||
| 		end |  | ||||||
| 	end |  | ||||||
| }) | }) | ||||||
|  |  | ||||||
| minetest.register_craft( { | minetest.register_craft( { | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| # textdomain: fireflies | # textdomain: fireflies | ||||||
| Firefly=Lampiro | Firefly=Lampiro | ||||||
| Hidden Firefly=Kaŝita Lampiro | Hidden Firefly=Kaŝita lampiro | ||||||
| Bug Net=Insekta Reto | Bug Net=Insekta reto | ||||||
| Firefly in a Bottle=Lampiro en Botelo | Firefly in a Bottle=Lampiro en botelo | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| # textdomain: fireflies | # textdomain: fireflies | ||||||
| Firefly=Светлячок | Firefly=Светлячок | ||||||
| Hidden Firefly=Притаившийся Светлячок | Hidden Firefly=Притаившийся светлячок | ||||||
| Bug Net=Сачок Для Ловли Насекомых | Bug Net=Сачок | ||||||
| Firefly in a Bottle=Светлячок в Бутылке | Firefly in a Bottle=Светлячок в бутылке | ||||||
|   | |||||||
| @@ -1,12 +1,12 @@ | |||||||
| # textdomain: flowers | # textdomain: flowers | ||||||
| Red Rose=Ruĝa Rozo | Red Rose=Ruĝa rozo | ||||||
| Orange Tulip=Oranĝkolora Tulipo | Orange Tulip=Oranĝkolora tulipo | ||||||
| Yellow Dandelion=Flava Leontodo | Yellow Dandelion=Flava leontodo | ||||||
| Green Chrysanthemum=Verda Krizantemo | Green Chrysanthemum=Verda krizantemo | ||||||
| Blue Geranium=Blua Geranio | Blue Geranium=Blua geranio | ||||||
| Viola=Violo | Viola=Violo | ||||||
| White Dandelion=Blanka Leontodo | White Dandelion=Blanka leontodo | ||||||
| Black Tulip=Nigra Tulipo | Black Tulip=Nigra tulipo | ||||||
| Red Mushroom=Ruĝa Fungo | Red Mushroom=Ruĝa fungo | ||||||
| Brown Mushroom=Bruna Fungo | Brown Mushroom=Bruna fungo | ||||||
| Waterlily=Nimfeo | Waterlily=Nimfeo | ||||||
|   | |||||||
| @@ -1,12 +1,12 @@ | |||||||
| # textdomain: flowers | # textdomain: flowers | ||||||
| Red Rose=Красная Роза | Red Rose=Красная роза | ||||||
| Orange Tulip=Оранжевый Тюльпан | Orange Tulip=Оранжевый тюльпан | ||||||
| Yellow Dandelion=Желтый Одуванчик | Yellow Dandelion=Жёлтый одуванчик | ||||||
| Green Chrysanthemum=Зелёная Хризантема | Green Chrysanthemum=Зелёная хризантема | ||||||
| Blue Geranium=Синяя Герань | Blue Geranium=Синяя герань | ||||||
| Viola=Фиалка | Viola=Фиалка | ||||||
| White Dandelion=Белый Одуванчик | White Dandelion=Белый одуванчик | ||||||
| Black Tulip=Черный Тюльпан | Black Tulip=Чёрный тюльпан | ||||||
| Red Mushroom=Мухомор | Red Mushroom=Красный гриб | ||||||
| Brown Mushroom=Коричневый Гриб | Brown Mushroom=Коричневый гриб | ||||||
| Waterlily=Кувшинка | Waterlily=Лилия | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| # textdomain: game_commands | # textdomain: game_commands | ||||||
| Kill yourself to respawn=Убейте себя, чтобы возродиться | Kill yourself to respawn=Убейте себя, чтобы возродиться | ||||||
| No static_spawnpoint defined=static_spawnpoint не определён | No static_spawnpoint defined=static_spawnpoint не определён | ||||||
| You need to be online to be killed!=Вы должны быть онлайн, чтобы убить себя! | You need to be online to be killed!=Вы должны быть в сети, чтобы убить себя! | ||||||
|   | |||||||
| @@ -2,4 +2,4 @@ | |||||||
|  |  | ||||||
| Key=Ŝlosilo | Key=Ŝlosilo | ||||||
| Key to @1's @2=Ŝlosilo por la @2 de @1 | Key to @1's @2=Ŝlosilo por la @2 de @1 | ||||||
| Skeleton Key=Skeleta Ŝlosilo | Skeleton Key=Skeleta ŝlosilo | ||||||
|   | |||||||
| @@ -2,4 +2,4 @@ | |||||||
|  |  | ||||||
| Key=Ключ | Key=Ключ | ||||||
| Key to @1's @2=Ключ к @2 от @1 | Key to @1's @2=Ключ к @2 от @1 | ||||||
| Skeleton Key=Ключ Скелета | Skeleton Key=Заготовка ключа | ||||||
|   | |||||||
| @@ -1,3 +1,3 @@ | |||||||
| # textdomain: map | # textdomain: map | ||||||
| Mapping Kit=Mapa Ilaro | Mapping Kit=Mapa ilaro | ||||||
| Use with 'Minimap' key=Uzi per 'Minimapo' klavo | Use with 'Minimap' key=Uzi per 'Minimapo' klavo | ||||||
|   | |||||||
| @@ -1,3 +1,3 @@ | |||||||
| # textdomain: map | # textdomain: map | ||||||
| Mapping Kit=Картографический комплект | Mapping Kit=Картографический комплект | ||||||
| Use with 'Minimap' key=Используйте с ключом 'Minimap'  | Use with 'Minimap' key=Используйте клавишей 'Миникарта'  | ||||||
|   | |||||||
| @@ -282,6 +282,7 @@ local function get_formspec(player) | |||||||
| 		"tooltip[clear;"..esc(S("Reset")).."]".. | 		"tooltip[clear;"..esc(S("Reset")).."]".. | ||||||
| 		"tooltip[prev;"..esc(S("Previous page")).."]".. | 		"tooltip[prev;"..esc(S("Previous page")).."]".. | ||||||
| 		"tooltip[next;"..esc(S("Next page")).."]".. | 		"tooltip[next;"..esc(S("Next page")).."]".. | ||||||
|  | 		"field_enter_after_edit[filter;true]".. | ||||||
| 		"field_close_on_enter[filter;false]") | 		"field_close_on_enter[filter;false]") | ||||||
|  |  | ||||||
| 	if #data.items == 0 then | 	if #data.items == 0 then | ||||||
|   | |||||||
| @@ -33,7 +33,7 @@ Any dark green dye=Ajna malhela verda tinkturo | |||||||
| # Label for group ingredients | # Label for group ingredients | ||||||
| G=A | G=A | ||||||
| Any item belonging to the group(s): @1=Ajna objekto de la aro(j): @1 | Any item belonging to the group(s): @1=Ajna objekto de la aro(j): @1 | ||||||
| Unknown Item=Nekonata Objekto | Unknown Item=Nekonata objekto | ||||||
| Fuel=Brulaĵo | Fuel=Brulaĵo | ||||||
| Usage @1 of @2=Uzo @1 el @2 | Usage @1 of @2=Uzo @1 el @2 | ||||||
| Recipe @1 of @2=Recepto @1 el @2 | Recipe @1 of @2=Recepto @1 el @2 | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ Any wool=Любая шерсть | |||||||
| Any stick=Любая палка | Any stick=Любая палка | ||||||
| Any vessel=Любой сосуд | Any vessel=Любой сосуд | ||||||
| Any wood planks=Любые доски | Any wood planks=Любые доски | ||||||
| Any kind of stone block=Любой вид каменного блока | Any kind of stone block=Любой вид камня | ||||||
| Any red flower=Любой красный цветок | Any red flower=Любой красный цветок | ||||||
| Any blue flower=Любой синий цветок | Any blue flower=Любой синий цветок | ||||||
| Any black flower=Любой чёрный цветок | Any black flower=Любой чёрный цветок | ||||||
| @@ -14,21 +14,21 @@ Any white flower=Любой белый цветок | |||||||
| Any orange flower=Любой оранжевый цветок | Any orange flower=Любой оранжевый цветок | ||||||
| Any violet flower=Любой фиолетовый цветок | Any violet flower=Любой фиолетовый цветок | ||||||
| Any yellow flower=Любой жёлтый цветок | Any yellow flower=Любой жёлтый цветок | ||||||
| Any red dye=Любая красная краска | Any red dye=Любой красный краситель | ||||||
| Any blue dye=Любая синяя краска | Any blue dye=Любой синий краситель | ||||||
| Any cyan dye=Любая голубая краска | Any cyan dye=Любой бирюзовый краситель | ||||||
| Any grey dye=Любая серая краска | Any grey dye=Любой серый краситель | ||||||
| Any pink dye=Любая розовая краска | Any pink dye=Любой розовый краситель | ||||||
| Any black dye=Любая чёрная краска | Any black dye=Любой чёрный краситель | ||||||
| Any brown dye=Любая бурая краска | Any brown dye=Любой коричневый краситель | ||||||
| Any green dye=Любая зелёная краска | Any green dye=Любой зелёный краситель | ||||||
| Any white dye=Любая белая краска | Any white dye=Любой белый краситель | ||||||
| Any orange dye=Любая оранжевая краска | Any orange dye=Любой оранжевый краситель | ||||||
| Any violet dye=Любая фиолетовая краска | Any violet dye=Любой фиолетовый краситель | ||||||
| Any yellow dye=Любая жёлтая краска | Any yellow dye=Любой жёлтый краситель | ||||||
| Any magenta dye=Любая пурпурная краска | Any magenta dye=Любой сиреневый краситель | ||||||
| Any dark grey dye=Любая тёмно-серая краска | Any dark grey dye=Любой тёмно-серый краситель | ||||||
| Any dark green dye=Любая тёмно-зелёная краска | Any dark green dye=Любой тёмно-зелёный краситель | ||||||
| # Label for group ingredients | # Label for group ingredients | ||||||
| G=Г | G=Г | ||||||
| Any item belonging to the group(s): @1=Любой предмет из групп(ы): @1 | Any item belonging to the group(s): @1=Любой предмет из групп(ы): @1 | ||||||
| @@ -39,13 +39,13 @@ Recipe @1 of @2=Рецепт @1 из @2 | |||||||
| Previous recipe=Предыдущий рецепт | Previous recipe=Предыдущий рецепт | ||||||
| Next recipe=Следующий рецепт | Next recipe=Следующий рецепт | ||||||
| Recipe is too big to be displayed.=Рецепт слишком большой для отображения. | Recipe is too big to be displayed.=Рецепт слишком большой для отображения. | ||||||
| Shapeless=Формонезависимый | Shapeless=Бесформенный | ||||||
| Cooking time: @1=Время приготовления: @1 | Cooking time: @1=Время готовки: @1 | ||||||
| Search=Поиск | Search=Поиск | ||||||
| Reset=Сброс | Reset=Сброс | ||||||
| Previous page=Предыдущая страница | Previous page=Предыдущая страница | ||||||
| Next page=Следующая страница | Next page=Следующая страница | ||||||
| No items to show.=Нет предметов для отображения. | No items to show.=Нет предметов. | ||||||
| No usages.=Нет использований. | No usages.=Нет использований. | ||||||
| Click again to show recipes.=Кликните снова чтобы увидеть рецепты. | Click again to show recipes.=Кликните снова чтобы увидеть рецепты. | ||||||
| No recipes.=Нет рецептов. | No recipes.=Нет рецептов. | ||||||
|   | |||||||
| @@ -71,7 +71,7 @@ function player_api.set_model(player, model_name) | |||||||
| 	player_data.model = model_name | 	player_data.model = model_name | ||||||
| 	-- Clear animation data as the model has changed | 	-- Clear animation data as the model has changed | ||||||
| 	-- (required for setting the `stand` animation not to be a no-op) | 	-- (required for setting the `stand` animation not to be a no-op) | ||||||
| 	player_data.animation, player_data.animation_speed = nil, nil | 	player_data.animation, player_data.animation_speed, player_data.animation_loop = nil, nil, nil | ||||||
|  |  | ||||||
| 	local model = models[model_name] | 	local model = models[model_name] | ||||||
| 	if model then | 	if model then | ||||||
| @@ -116,20 +116,27 @@ function player_api.set_texture(player, index, texture) | |||||||
| 	player_api.set_textures(player, textures) | 	player_api.set_textures(player, textures) | ||||||
| end | end | ||||||
|  |  | ||||||
| function player_api.set_animation(player, anim_name, speed) | function player_api.set_animation(player, anim_name, speed, loop) | ||||||
| 	local player_data = get_player_data(player) | 	local player_data = get_player_data(player) | ||||||
| 	local model = models[player_data.model] | 	local model = models[player_data.model] | ||||||
| 	if not (model and model.animations[anim_name]) then | 	if not (model and model.animations[anim_name]) then | ||||||
| 		return | 		return | ||||||
| 	end | 	end | ||||||
| 	speed = speed or model.animation_speed | 	speed = speed or model.animation_speed | ||||||
| 	if player_data.animation == anim_name and player_data.animation_speed == speed then | 	if loop == nil then | ||||||
|  | 		loop = true | ||||||
|  | 	end | ||||||
|  | 	if player_data.animation == anim_name | ||||||
|  | 		and player_data.animation_speed == speed | ||||||
|  | 		and player_data.animation_loop == loop | ||||||
|  | 	then | ||||||
| 		return | 		return | ||||||
| 	end | 	end | ||||||
| 	local previous_anim = model.animations[player_data.animation] or {} | 	local previous_anim = model.animations[player_data.animation] or {} | ||||||
| 	local anim = model.animations[anim_name] | 	local anim = model.animations[anim_name] | ||||||
| 	player_data.animation = anim_name | 	player_data.animation = anim_name | ||||||
| 	player_data.animation_speed = speed | 	player_data.animation_speed = speed | ||||||
|  | 	player_data.animation_loop = loop | ||||||
| 	-- If necessary change the local animation (only seen by the client of *that* player) | 	-- If necessary change the local animation (only seen by the client of *that* player) | ||||||
| 	-- `override_local` <=> suspend local animations while this one is active | 	-- `override_local` <=> suspend local animations while this one is active | ||||||
| 	-- (this is basically a hack, proper engine feature needed...) | 	-- (this is basically a hack, proper engine feature needed...) | ||||||
| @@ -146,7 +153,7 @@ function player_api.set_animation(player, anim_name, speed) | |||||||
| 		end | 		end | ||||||
| 	end | 	end | ||||||
| 	-- Set the animation seen by everyone else | 	-- Set the animation seen by everyone else | ||||||
| 	player:set_animation(anim, speed, animation_blend) | 	player:set_animation(anim, speed, animation_blend, loop) | ||||||
| 	-- Update related properties if they changed | 	-- Update related properties if they changed | ||||||
| 	if anim._equals ~= previous_anim._equals then | 	if anim._equals ~= previous_anim._equals then | ||||||
| 		player:set_properties({ | 		player:set_properties({ | ||||||
|   | |||||||
| @@ -1,3 +1,3 @@ | |||||||
| # textdomain: screwdriver | # textdomain: screwdriver | ||||||
| Screwdriver=Отвёртка | Screwdriver=Отвёртка | ||||||
| (left-click rotates face, right-click rotates axis)=(клик левой кнопкой мыши вращает грань, клик правой кнопкой мыши вращает ось) | (left-click rotates face, right-click rotates axis)=(левый клик вращает грань, правый клик вращает ось) | ||||||
|   | |||||||
| @@ -6,4 +6,4 @@ Teleported to home!=Вы телепортировались домой! | |||||||
| Set a home using /sethome=Установите домашнюю точку, используя /sethome | Set a home using /sethome=Установите домашнюю точку, используя /sethome | ||||||
| Set your home point=Установите вашу домашнюю точку | Set your home point=Установите вашу домашнюю точку | ||||||
| Home set!=Домашняя точка установлена! | Home set!=Домашняя точка установлена! | ||||||
| Player not found!=Игрок не обнаружен! | Player not found!=Игрок не найден! | ||||||
|   | |||||||
							
								
								
									
										49
									
								
								mods/spawn/api.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								mods/spawn/api.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,49 @@ | |||||||
|  | spawn = {} | ||||||
|  |  | ||||||
|  | -- provide empty default implementations | ||||||
|  |  | ||||||
|  | function spawn.get_default_pos() | ||||||
|  | 	return nil | ||||||
|  | end | ||||||
|  |  | ||||||
|  | function spawn.add_suitable_biome(biome) | ||||||
|  | end | ||||||
|  |  | ||||||
|  | -- Callback registration | ||||||
|  |  | ||||||
|  | spawn.registered_on_spawn = {} | ||||||
|  |  | ||||||
|  | function spawn.register_on_spawn(func) | ||||||
|  | 	table.insert(spawn.registered_on_spawn, func) | ||||||
|  | end | ||||||
|  |  | ||||||
|  | -- Logic run on spawn | ||||||
|  |  | ||||||
|  | local use_engine_spawn = minetest.settings:get("static_spawnpoint") or | ||||||
|  | 		minetest.settings:get_bool("engine_spawn") | ||||||
|  |  | ||||||
|  | local function on_spawn(player, is_new) | ||||||
|  | 	-- Ask all callbacks first | ||||||
|  | 	for _, cb in ipairs(spawn.registered_on_spawn) do | ||||||
|  | 		if cb(player, is_new) then | ||||||
|  | 			return true | ||||||
|  | 		end | ||||||
|  | 	end | ||||||
|  | 	-- Fall back to default spawn | ||||||
|  | 	if not use_engine_spawn then | ||||||
|  | 		local pos = spawn.get_default_pos() | ||||||
|  | 		if pos then | ||||||
|  | 			player:set_pos(pos) | ||||||
|  | 			return true | ||||||
|  | 		end | ||||||
|  | 	end | ||||||
|  | 	return false | ||||||
|  | end | ||||||
|  |  | ||||||
|  | minetest.register_on_newplayer(function(player) | ||||||
|  | 	on_spawn(player, true) | ||||||
|  | end) | ||||||
|  |  | ||||||
|  | minetest.register_on_respawnplayer(function(player) | ||||||
|  | 	return on_spawn(player, false) | ||||||
|  | end) | ||||||
| @@ -1,12 +1,12 @@ | |||||||
| -- spawn/init.lua | -- Always load the API | ||||||
|  | ---------------------- | ||||||
|  | dofile(minetest.get_modpath(minetest.get_current_modname()) .. "/api.lua") | ||||||
|  |  | ||||||
| -- Disable by mapgen, setting or if 'static_spawnpoint' is set | -- Disable biome-search implementation on unsuitable mapgens | ||||||
| -------------------------------------------------------------- | ------------------------------------------------------------ | ||||||
|  |  | ||||||
| local mg_name = minetest.get_mapgen_setting("mg_name") | local mg_name = minetest.get_mapgen_setting("mg_name") | ||||||
| if mg_name == "v6" or mg_name == "singlenode" or | if mg_name == "v6" or mg_name == "singlenode" then | ||||||
| 		minetest.settings:get("static_spawnpoint") or |  | ||||||
| 		minetest.settings:get_bool("engine_spawn") then |  | ||||||
| 	return | 	return | ||||||
| end | end | ||||||
|  |  | ||||||
| @@ -23,27 +23,35 @@ local checks = 128 * 128 | |||||||
| local pos = {x = 0, y = 8, z = 0} | local pos = {x = 0, y = 8, z = 0} | ||||||
|  |  | ||||||
|  |  | ||||||
| -- Table of suitable biomes | -- Table of suitable biomes and matching API function | ||||||
|  |  | ||||||
| local biome_ids = { | local biome_ids = {} | ||||||
| 	minetest.get_biome_id("taiga"), |  | ||||||
| 	minetest.get_biome_id("coniferous_forest"), | function spawn.add_suitable_biome(biome) | ||||||
| 	minetest.get_biome_id("deciduous_forest"), | 	local id = minetest.get_biome_id(biome) | ||||||
| 	minetest.get_biome_id("grassland"), | 	assert(id ~= nil) | ||||||
| 	minetest.get_biome_id("savanna"), | 	biome_ids[id] = true | ||||||
| } | end | ||||||
|  |  | ||||||
|  | for _, name in ipairs({ | ||||||
|  | 	"taiga", "coniferous_forest", "deciduous_forest", "grassland", "savanna" | ||||||
|  | }) do | ||||||
|  | 	local id = minetest.get_biome_id(name) | ||||||
|  | 	if id then | ||||||
|  | 		biome_ids[id] = true | ||||||
|  | 	end | ||||||
|  | end | ||||||
|  |  | ||||||
| -- End of parameters | -- End of parameters | ||||||
| -------------------- | -------------------- | ||||||
|  |  | ||||||
|  |  | ||||||
| -- Direction table | -- Direction table | ||||||
|  |  | ||||||
| local dirs = { | local dirs = { | ||||||
| 	{x = 0, y = 0, z = 1}, | 	vector.new(0, 0, 1), | ||||||
| 	{x = -1, y = 0, z = 0}, | 	vector.new(-1, 0, 0), | ||||||
| 	{x = 0, y = 0, z = -1}, | 	vector.new(0, 0, -1), | ||||||
| 	{x = 1, y = 0, z = 0}, | 	vector.new(1, 0, 0), | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -67,8 +75,8 @@ local chunksize = tonumber(minetest.get_mapgen_setting("chunksize")) | |||||||
| local spawn_limit = math.max(mapgen_limit - (chunksize + 1) * 16, 0) | local spawn_limit = math.max(mapgen_limit - (chunksize + 1) * 16, 0) | ||||||
|  |  | ||||||
|  |  | ||||||
| --Functions | -- Functions | ||||||
| ----------- | ------------ | ||||||
|  |  | ||||||
| -- Get next position on square search spiral | -- Get next position on square search spiral | ||||||
|  |  | ||||||
| @@ -98,15 +106,11 @@ local function search() | |||||||
| 	for iter = 1, checks do | 	for iter = 1, checks do | ||||||
| 		local biome_data = minetest.get_biome_data(pos) | 		local biome_data = minetest.get_biome_data(pos) | ||||||
| 		-- Sometimes biome_data is nil | 		-- Sometimes biome_data is nil | ||||||
| 		local biome = biome_data and biome_data.biome | 		if biome_data and biome_ids[biome_data.biome] then | ||||||
| 		for id_ind = 1, #biome_ids do | 			local spawn_y = minetest.get_spawn_level(pos.x, pos.z) | ||||||
| 			local biome_id = biome_ids[id_ind] | 			if spawn_y then | ||||||
| 			if biome == biome_id then | 				spawn_pos = vector.new(pos.x, spawn_y, pos.z) | ||||||
| 				local spawn_y = minetest.get_spawn_level(pos.x, pos.z) | 				return true | ||||||
| 				if spawn_y then |  | ||||||
| 					spawn_pos = {x = pos.x, y = spawn_y, z = pos.z} |  | ||||||
| 					return true |  | ||||||
| 				end |  | ||||||
| 			end | 			end | ||||||
| 		end | 		end | ||||||
|  |  | ||||||
| @@ -121,38 +125,11 @@ local function search() | |||||||
| end | end | ||||||
|  |  | ||||||
|  |  | ||||||
| -- On new player spawn and player respawn | function spawn.get_default_pos() | ||||||
|  | 	-- Search for spawn position once per server session | ||||||
| -- Search for spawn position once per server session. If successful, store |  | ||||||
| -- position and reposition players, otherwise leave them at engine spawn |  | ||||||
| -- position. |  | ||||||
|  |  | ||||||
| local function on_spawn(player) |  | ||||||
| 	if not searched then | 	if not searched then | ||||||
| 		success = search() | 		success = search() | ||||||
| 		searched = true | 		searched = true | ||||||
| 	end | 	end | ||||||
| 	if success then | 	return success and spawn_pos | ||||||
| 		player:set_pos(spawn_pos) |  | ||||||
| 	end |  | ||||||
| 	return success |  | ||||||
| end | end | ||||||
|  |  | ||||||
| minetest.register_on_newplayer(function(player) |  | ||||||
| 	on_spawn(player) |  | ||||||
| end) |  | ||||||
|  |  | ||||||
| local enable_bed_respawn = minetest.settings:get_bool("enable_bed_respawn") |  | ||||||
| if enable_bed_respawn == nil then |  | ||||||
| 	enable_bed_respawn = true |  | ||||||
| end |  | ||||||
|  |  | ||||||
| minetest.register_on_respawnplayer(function(player) |  | ||||||
| 	-- Avoid respawn conflict with beds mod |  | ||||||
| 	if beds and enable_bed_respawn and |  | ||||||
| 			beds.spawn[player:get_player_name()] then |  | ||||||
| 		return |  | ||||||
| 	end |  | ||||||
|  |  | ||||||
| 	return on_spawn(player) |  | ||||||
| end) |  | ||||||
|   | |||||||
| @@ -1,4 +1,3 @@ | |||||||
| name = spawn | name = spawn | ||||||
| description = Minetest Game mod: spawn | description = Minetest Game mod: spawn | ||||||
| depends = default | depends = default | ||||||
| optional_depends = beds |  | ||||||
|   | |||||||
| @@ -1,145 +1,145 @@ | |||||||
| # textdomain: stairs | # textdomain: stairs | ||||||
| Glass Stair=Vitra Ŝtupo | Glass Stair=Vitra ŝtupo | ||||||
| Glass Slab=Vitra Plato | Glass Slab=Vitra plato | ||||||
| Inner Glass Stair=Interna Vitra Ŝtupo | Inner Glass Stair=Interna vitra ŝtupo | ||||||
| Outer Glass Stair=Ekstera Vitra Ŝtupo | Outer Glass Stair=Ekstera vitra ŝtupo | ||||||
| Obsidian Glass Stair=Obsidiana Vitra Ŝtupo | Obsidian Glass Stair=Obsidiana vitra ŝtupo | ||||||
| Obsidian Glass Slab=Obsidiana Vitra Plato | Obsidian Glass Slab=Obsidiana vitra plato | ||||||
| Inner Obsidian Glass Stair=Interna Obsidiana Vitra Ŝtupo | Inner Obsidian Glass Stair=Interna obsidiana vitra ŝtupo | ||||||
| Outer Obsidian Glass Stair=Ekstera Obsidiana Vitra Ŝtupo | Outer Obsidian Glass Stair=Ekstera obsidiana vitra ŝtupo | ||||||
| Wooden Stair=Ligna Ŝtupo | Wooden Stair=Ligna ŝtupo | ||||||
| Inner Wooden Stair=Interna Ligna Ŝtupo | Inner Wooden Stair=Interna ligna ŝtupo | ||||||
| Outer Wooden Stair=Ekstera Ligna Ŝtupo | Outer Wooden Stair=Ekstera ligna ŝtupo | ||||||
| Wooden Slab=Ligna Plato | Wooden Slab=Ligna plato | ||||||
| Jungle Wood Stair=Ĝangala Ligna Ŝtupo | Jungle Wood Stair=Ĝangala ligna ŝtupo | ||||||
| Inner Jungle Wood Stair=Interna Ĝangala Ligna Ŝtupo | Inner Jungle Wood Stair=Interna ĝangala ligna ŝtupo | ||||||
| Outer Jungle Wood Stair=Ekstera Ĝangala Ligna Ŝtupo | Outer Jungle Wood Stair=Ekstera ĝangala ligna ŝtupo | ||||||
| Jungle Wood Slab=Ĝangala Ligna Plato | Jungle Wood Slab=Ĝangala ligna plato | ||||||
| Pine Wood Stair=Pina Ligna Ŝtupo | Pine Wood Stair=Pina ligna ŝtupo | ||||||
| Inner Pine Wood Stair=Interna Pina Ligna Ŝtupo | Inner Pine Wood Stair=Interna pina ligna ŝtupo | ||||||
| Outer Pine Wood Stair=Ekstera Pina Ligna Ŝtupo | Outer Pine Wood Stair=Ekstera pina ligna ŝtupo | ||||||
| Pine Wood Slab=Pina Ligna Plato | Pine Wood Slab=Pina ligna plato | ||||||
| Acacia Wood Stair=Akacia Ligna Ŝtupo | Acacia Wood Stair=Akacia ligna ŝtupo | ||||||
| Inner Acacia Wood Stair=Interna Akacia Ligna Ŝtupo | Inner Acacia Wood Stair=Interna akacia ligna ŝtupo | ||||||
| Outer Acacia Wood Stair=Ekstera Akacia Ligna Ŝtupo | Outer Acacia Wood Stair=Ekstera akacia ligna ŝtupo | ||||||
| Acacia Wood Slab=Akacia Ligna Plato | Acacia Wood Slab=Akacia ligna plato | ||||||
| Aspen Wood Stair=Tremola Ligna Ŝtupo | Aspen Wood Stair=Tremola ligna ŝtupo | ||||||
| Inner Aspen Wood Stair=Interna Tremola Ligna Ŝtupo | Inner Aspen Wood Stair=Interna tremola ligna ŝtupo | ||||||
| Outer Aspen Wood Stair=Ekstera Tremola Ligna Ŝtupo | Outer Aspen Wood Stair=Ekstera tremola ligna ŝtupo | ||||||
| Aspen Wood Slab=Tremola Ligna Plato | Aspen Wood Slab=Tremola ligna plato | ||||||
| Stone Stair=Ŝtona Ŝtupo | Stone Stair=Ŝtona ŝtupo | ||||||
| Inner Stone Stair=Interna Ŝtona Ŝtupo | Inner Stone Stair=Interna ŝtona ŝtupo | ||||||
| Outer Stone Stair=Ekstera Ŝtona Ŝtupo | Outer Stone Stair=Ekstera ŝtona ŝtupo | ||||||
| Stone Slab=Ŝtona Plato | Stone Slab=Ŝtona plato | ||||||
| Cobblestone Stair=Pavimŝtona Ŝtupo | Cobblestone Stair=Pavimŝtona ŝtupo | ||||||
| Inner Cobblestone Stair=Interna Pavimŝtona Ŝtupo | Inner Cobblestone Stair=Interna pavimŝtona ŝtupo | ||||||
| Outer Cobblestone Stair=Ekstera Pavimŝtona Ŝtupo | Outer Cobblestone Stair=Ekstera pavimŝtona ŝtupo | ||||||
| Cobblestone Slab=Pavimŝtona Plato | Cobblestone Slab=Pavimŝtona plato | ||||||
| Mossy Cobblestone Stair=Muska Pavimŝtona Ŝtupo | Mossy Cobblestone Stair=Muska pavimŝtona ŝtupo | ||||||
| Inner Mossy Cobblestone Stair=Interna Muska Pavimŝtona Ŝtupo | Inner Mossy Cobblestone Stair=Interna muska pavimŝtona ŝtupo | ||||||
| Outer Mossy Cobblestone Stair=Ekstera Muska Pavimŝtona Ŝtupo | Outer Mossy Cobblestone Stair=Ekstera muska pavimŝtona ŝtupo | ||||||
| Mossy Cobblestone Slab=Muska Pavimŝtona Plato | Mossy Cobblestone Slab=Muska pavimŝtona plato | ||||||
| Stone Brick Stair=Ŝtona Brika Ŝtupo | Stone Brick Stair=Ŝtona brika ŝtupo | ||||||
| Inner Stone Brick Stair=Interna Ŝtona Brika Ŝtupo | Inner Stone Brick Stair=Interna ŝtona brika ŝtupo | ||||||
| Outer Stone Brick Stair=Ekstera Ŝtona Brika Ŝtupo | Outer Stone Brick Stair=Ekstera ŝtona brika ŝtupo | ||||||
| Stone Brick Slab=Ŝtona Brika Plato | Stone Brick Slab=Ŝtona brika plato | ||||||
| Stone Block Stair=Ŝtona Ŝtipa Ŝtupo | Stone Block Stair=Ŝtona ŝtipa ŝtupo | ||||||
| Inner Stone Block Stair=Interna Ŝtona Ŝtipa Ŝtupo | Inner Stone Block Stair=Interna ŝtona ŝtipa ŝtupo | ||||||
| Outer Stone Block Stair=Ekstera Ŝtona Ŝtipa Ŝtupo | Outer Stone Block Stair=Ekstera ŝtona ŝtipa ŝtupo | ||||||
| Stone Block Slab=Ŝtona Ŝtipa Plato | Stone Block Slab=Ŝtona ŝtipa plato | ||||||
| Desert Stone Stair=Dezerta Ŝtona Ŝtupo | Desert Stone Stair=Dezerta ŝtona ŝtupo | ||||||
| Inner Desert Stone Stair=Interna Dezerta Ŝtona Ŝtupo | Inner Desert Stone Stair=Interna dezerta ŝtona ŝtupo | ||||||
| Outer Desert Stone Stair=Ekstera Dezerta Ŝtona Ŝtupo | Outer Desert Stone Stair=Ekstera dezerta ŝtona ŝtupo | ||||||
| Desert Stone Slab=Dezerta Ŝtona Plato | Desert Stone Slab=Dezerta ŝtona plato | ||||||
| Desert Cobblestone Stair=Dezerta Pavimŝtona Ŝtupo | Desert Cobblestone Stair=Dezerta pavimŝtona ŝtupo | ||||||
| Inner Desert Cobblestone Stair=Interna Dezerta Pavimŝtona Ŝtupo | Inner Desert Cobblestone Stair=Interna dezerta pavimŝtona ŝtupo | ||||||
| Outer Desert Cobblestone Stair=Ekstera Dezerta Pavimŝtona Ŝtupo | Outer Desert Cobblestone Stair=Ekstera dezerta pavimŝtona ŝtupo | ||||||
| Desert Cobblestone Slab=Dezerta Pavimŝtona Plato | Desert Cobblestone Slab=Dezerta pavimŝtona plato | ||||||
| Desert Stone Brick Stair=Dezerta Ŝtona Brika Ŝtupo | Desert Stone Brick Stair=Dezerta ŝtona brika ŝtupo | ||||||
| Inner Desert Stone Brick Stair=Interna Dezerta Ŝtona Brika Ŝtupo | Inner Desert Stone Brick Stair=Interna dezerta ŝtona brika ŝtupo | ||||||
| Outer Desert Stone Brick Stair=Ekstera Dezerta Ŝtona Brika Ŝtupo | Outer Desert Stone Brick Stair=Ekstera dezerta ŝtona brika ŝtupo | ||||||
| Desert Stone Brick Slab=Dezerta Ŝtona Brika Plato | Desert Stone Brick Slab=Dezerta ŝtona brika plato | ||||||
| Desert Stone Block Stair=Dezerta Ŝtona Bloko Ŝtupo | Desert Stone Block Stair=Dezerta ŝtona bloko ŝtupo | ||||||
| Inner Desert Stone Block Stair=Interna Dezerta Ŝtona Bloko Stupo | Inner Desert Stone Block Stair=Interna dezerta ŝtona bloko ŝtupo | ||||||
| Outer Desert Stone Block Stair=Ekstera Dezerta Ŝtona Bloko Ŝtupo | Outer Desert Stone Block Stair=Ekstera dezerta ŝtona bloko ŝtupo | ||||||
| Desert Stone Block Slab=Dezerta Ŝtona Bloko Plato | Desert Stone Block Slab=Dezerta ŝtona bloko plato | ||||||
| Sandstone Stair=Sablŝtona Ŝtupo | Sandstone Stair=Sablŝtona ŝtupo | ||||||
| Inner Sandstone Stair=Interna Ŝablŝtona Ŝtupo | Inner Sandstone Stair=Interna ŝablŝtona ŝtupo | ||||||
| Outer Sandstone Stair=Ekstera Ŝablŝtona Ŝtupo | Outer Sandstone Stair=Ekstera ŝablŝtona ŝtupo | ||||||
| Sandstone Slab=Ŝablŝtona Plato | Sandstone Slab=Ŝablŝtona plato | ||||||
| Sandstone Brick Stair=Ŝablŝtona Brika Ŝtupo | Sandstone Brick Stair=Ŝablŝtona brika ŝtupo | ||||||
| Inner Sandstone Brick Stair=Interna Ŝablŝtona Brika Ŝtupo | Inner Sandstone Brick Stair=Interna ŝablŝtona brika ŝtupo | ||||||
| Outer Sandstone Brick Stair=Ekstera Ŝablŝtona Brika Ŝtupo | Outer Sandstone Brick Stair=Ekstera ŝablŝtona brika ŝtupo | ||||||
| Sandstone Brick Slab=Ŝablŝtona Brika Plato | Sandstone Brick Slab=Ŝablŝtona brika plato | ||||||
| Sandstone Block Stair=Ŝablŝtona Ŝtipa Ŝtupo | Sandstone Block Stair=Ŝablŝtona ŝtipa ŝtupo | ||||||
| Inner Sandstone Block Stair=Interna Ŝablŝtona Ŝtipa Ŝtupo | Inner Sandstone Block Stair=Interna ŝablŝtona ŝtipa ŝtupo | ||||||
| Outer Sandstone Block Stair=Ekstera Ŝablŝtona Ŝtipa Ŝtupo | Outer Sandstone Block Stair=Ekstera ŝablŝtona ŝtipa ŝtupo | ||||||
| Sandstone Block Slab=Ŝablŝtona Ŝtipa Plato | Sandstone Block Slab=Ŝablŝtona ŝtipa plato | ||||||
| Desert Sandstone Stair=Dezerta Ŝablŝtona Ŝtupo | Desert Sandstone Stair=Dezerta ŝablŝtona ŝtupo | ||||||
| Inner Desert Sandstone Stair=Interna Dezerta Ŝablŝtona Ŝtupo | Inner Desert Sandstone Stair=Interna dezerta ŝablŝtona ŝtupo | ||||||
| Outer Desert Sandstone Stair=Ekstera Dezerta Ŝablŝtona Ŝtupo | Outer Desert Sandstone Stair=Ekstera dezerta ŝablŝtona ŝtupo | ||||||
| Desert Sandstone Slab=Dezerta Ŝablŝtona Plato | Desert Sandstone Slab=Dezerta ŝablŝtona plato | ||||||
| Desert Sandstone Brick Stair=Dezerta Ŝablŝtona Brika Ŝtupo | Desert Sandstone Brick Stair=Dezerta ŝablŝtona brika ŝtupo | ||||||
| Inner Desert Sandstone Brick Stair=Interna Dezerta Ŝablŝtona Brika Ŝtupo | Inner Desert Sandstone Brick Stair=Interna dezerta ŝablŝtona brika ŝtupo | ||||||
| Outer Desert Sandstone Brick Stair=Ekstera Dezerta Ŝablŝtona Brika Ŝtupo | Outer Desert Sandstone Brick Stair=Ekstera dezerta ŝablŝtona brika ŝtupo | ||||||
| Desert Sandstone Brick Slab=Dezerta Ŝablŝtona Brika Plato | Desert Sandstone Brick Slab=Dezerta ŝablŝtona brika plato | ||||||
| Desert Sandstone Block Stair=Dezerta Ŝablŝtona Ŝtipa Ŝtupo | Desert Sandstone Block Stair=Dezerta ŝablŝtona ŝtipa ŝtupo | ||||||
| Inner Desert Sandstone Block Stair=Interna Dezerta Ŝablŝtona Brika Ŝtupo | Inner Desert Sandstone Block Stair=Interna dezerta ŝablŝtona brika ŝtupo | ||||||
| Outer Desert Sandstone Block Stair=Ekstera Dezerta Ŝablŝtona Brika Ŝtupo | Outer Desert Sandstone Block Stair=Ekstera dezerta ŝablŝtona brika ŝtupo | ||||||
| Desert Sandstone Block Slab=Dezerta Ŝablŝtona Ŝtipa Plato | Desert Sandstone Block Slab=Dezerta ŝablŝtona ŝtipa plato | ||||||
| Silver Sandstone Stair=Arĝenta Ŝablŝtona Ŝtupo | Silver Sandstone Stair=Arĝenta ŝablŝtona ŝtupo | ||||||
| Inner Silver Sandstone Stair=Interna Arĝenta Ŝablŝtona Ŝtupo | Inner Silver Sandstone Stair=Interna arĝenta ŝablŝtona ŝtupo | ||||||
| Outer Silver Sandstone Stair=Ekstera Arĝenta Ŝablŝtona Ŝtupo | Outer Silver Sandstone Stair=Ekstera arĝenta ŝablŝtona ŝtupo | ||||||
| Silver Sandstone Slab=Arĝenta Ŝablŝtona Plato | Silver Sandstone Slab=Arĝenta ŝablŝtona plato | ||||||
| Silver Sandstone Brick Stair=Arĝenta Ŝablŝtona Brika Ŝtupo | Silver Sandstone Brick Stair=Arĝenta ŝablŝtona brika ŝtupo | ||||||
| Inner Silver Sandstone Brick Stair=Interna Arĝenta Ŝablŝtona Brika Ŝtupo | Inner Silver Sandstone Brick Stair=Interna arĝenta ŝablŝtona brika ŝtupo | ||||||
| Outer Silver Sandstone Brick Stair=Ekstera Arĝenta Ŝablŝtona Brika Ŝtupo | Outer Silver Sandstone Brick Stair=Ekstera arĝenta ŝablŝtona brika ŝtupo | ||||||
| Silver Sandstone Brick Slab=Arĝenta Ŝablŝtona Brika Plato | Silver Sandstone Brick Slab=Arĝenta ŝablŝtona brika plato | ||||||
| Silver Sandstone Block Stair=Arĝenta Ŝablŝtona Ŝtipa Ŝtupo | Silver Sandstone Block Stair=Arĝenta ŝablŝtona ŝtipa ŝtupo | ||||||
| Inner Silver Sandstone Block Stair=Interna Arĝenta Ŝablŝtona Ŝtipa Ŝtupo | Inner Silver Sandstone Block Stair=Interna arĝenta ŝablŝtona ŝtipa ŝtupo | ||||||
| Outer Silver Sandstone Block Stair=Ekstera Arĝenta Ŝablŝtona Ŝtipa Ŝtupo | Outer Silver Sandstone Block Stair=Ekstera arĝenta ŝablŝtona ŝtipa ŝtupo | ||||||
| Silver Sandstone Block Slab=Arĝenta Ŝablŝtona Ŝtipa Plato | Silver Sandstone Block Slab=Arĝenta ŝablŝtona ŝtipa plato | ||||||
| Obsidian Stair=Obsidiana Ŝtupo | Obsidian Stair=Obsidiana ŝtupo | ||||||
| Inner Obsidian Stair=Interna Obsidiana Ŝtupo | Inner Obsidian Stair=Interna obsidiana ŝtupo | ||||||
| Outer Obsidian Stair=Ekstera Obsidiana Ŝtupo | Outer Obsidian Stair=Ekstera obsidiana ŝtupo | ||||||
| Obsidian Slab=Obsidiana Plato | Obsidian Slab=Obsidiana plato | ||||||
| Obsidian Brick Stair=Obsidiana Brika Ŝtupo | Obsidian Brick Stair=Obsidiana brika ŝtupo | ||||||
| Inner Obsidian Brick Stair=Interna Obsidiana Brika Ŝtupo | Inner Obsidian Brick Stair=Interna obsidiana brika ŝtupo | ||||||
| Outer Obsidian Brick Stair=Ekstera Obsidiana Brika Ŝtupo | Outer Obsidian Brick Stair=Ekstera obsidiana brika ŝtupo | ||||||
| Obsidian Brick Slab=Obsidiana Brika Plato | Obsidian Brick Slab=Obsidiana brika plato | ||||||
| Obsidian Block Stair=Obsidiana Ŝtipa Ŝtupo | Obsidian Block Stair=Obsidiana ŝtipa ŝtupo | ||||||
| Inner Obsidian Block Stair=Interna Obsidiana Ŝtipa Ŝtupo | Inner Obsidian Block Stair=Interna obsidiana ŝtipa ŝtupo | ||||||
| Outer Obsidian Block Stair=Ekstera Obsidiana Ŝtipa Ŝtupo | Outer Obsidian Block Stair=Ekstera obsidiana ŝtipa ŝtupo | ||||||
| Obsidian Block Slab=Obsidiana Ŝtipa Plato | Obsidian Block Slab=Obsidiana ŝtipa plato | ||||||
| Brick Stair=Brika Ŝtupo | Brick Stair=Brika ŝtupo | ||||||
| Inner Brick Stair=Interna Brika Ŝtupo | Inner Brick Stair=Interna brika ŝtupo | ||||||
| Outer Brick Stair=Ekstera Brika Ŝtupo | Outer Brick Stair=Ekstera brika ŝtupo | ||||||
| Brick Slab=Brika Plato | Brick Slab=Brika plato | ||||||
| Steel Block Stair=Ŝtala Ŝtipa Ŝtupo | Steel Block Stair=Ŝtala ŝtipa ŝtupo | ||||||
| Inner Steel Block Stair=Interna Ŝtala Ŝtipa Ŝtupo | Inner Steel Block Stair=Interna ŝtala ŝtipa ŝtupo | ||||||
| Outer Steel Block Stair=Ekstera Ŝtala Ŝtipa Ŝtupo | Outer Steel Block Stair=Ekstera ŝtala ŝtipa ŝtupo | ||||||
| Steel Block Slab=Ŝtala Ŝtipa Plato | Steel Block Slab=Ŝtala ŝtipa plato | ||||||
| Tin Block Stair=Stana Ŝtipa Ŝtupo | Tin Block Stair=Stana ŝtipa ŝtupo | ||||||
| Inner Tin Block Stair=Interna Stana Ŝtipa Ŝtupo | Inner Tin Block Stair=Interna stana ŝtipa ŝtupo | ||||||
| Outer Tin Block Stair=Ekstera Stana Ŝtipa Ŝtupo | Outer Tin Block Stair=Ekstera stana ŝtipa ŝtupo | ||||||
| Tin Block Slab=Stana Ŝtipa Plato | Tin Block Slab=Stana ŝtipa plato | ||||||
| Copper Block Stair=Kupra Ŝtipa Ŝtupo | Copper Block Stair=Kupra ŝtipa ŝtupo | ||||||
| Inner Copper Block Stair=Interna Kupra Ŝtipa Ŝtupo | Inner Copper Block Stair=Interna kupra ŝtipa ŝtupo | ||||||
| Outer Copper Block Stair=Ekstera Kupra Ŝtipa Ŝtupo | Outer Copper Block Stair=Ekstera kupra ŝtipa ŝtupo | ||||||
| Copper Block Slab=Kupra Ŝtipa Plato | Copper Block Slab=Kupra ŝtipa plato | ||||||
| Bronze Block Stair=Bronza Ŝtipa Ŝtupo | Bronze Block Stair=Bronza ŝtipa ŝtupo | ||||||
| Inner Bronze Block Stair=Interna Bronza Ŝtipa Ŝtupo | Inner Bronze Block Stair=Interna bronza ŝtipa ŝtupo | ||||||
| Outer Bronze Block Stair=Ekstera Bronza Ŝtipa Ŝtupo | Outer Bronze Block Stair=Ekstera bronza ŝtipa ŝtupo | ||||||
| Bronze Block Slab=Bronza Ŝtipa Plato | Bronze Block Slab=Bronza ŝtipa plato | ||||||
| Gold Block Stair=Ora Ŝtipa Ŝtupo | Gold Block Stair=Ora ŝtipa ŝtupo | ||||||
| Inner Gold Block Stair=Interna Ora Ŝtipa Ŝtupo | Inner Gold Block Stair=Interna ora ŝtipa ŝtupo | ||||||
| Outer Gold Block Stair=Ekstera Ora Ŝtipa Ŝtupo | Outer Gold Block Stair=Ekstera ora ŝtipa ŝtupo | ||||||
| Gold Block Slab=Ora Ŝtipa Plato | Gold Block Slab=Ora ŝtipa plato | ||||||
| Ice Stair=Glacia Ŝtupo | Ice Stair=Glacia ŝtupo | ||||||
| Inner Ice Stair=Interna Glacia Ŝtupo | Inner Ice Stair=Interna glacia ŝtupo | ||||||
| Outer Ice Stair=Ekstera Glacia Ŝtupo | Outer Ice Stair=Ekstera glacia ŝtupo | ||||||
| Ice Slab=Glacia Plato | Ice Slab=Glacia plato | ||||||
| Snow Block Stair=Neĝa Ŝtipa Ŝtupo | Snow Block Stair=Neĝa ŝtipa ŝtupo | ||||||
| Inner Snow Block Stair=Interna Neĝa Ŝtipa Ŝtupo | Inner Snow Block Stair=Interna neĝa ŝtipa ŝtupo | ||||||
| Outer Snow Block Stair=Ekstera Neĝa Ŝtipa Ŝtupo | Outer Snow Block Stair=Ekstera neĝa ŝtipa ŝtupo | ||||||
| Snow Block Slab=Neĝa Ŝtipa Plato | Snow Block Slab=Neĝa ŝtipa plato | ||||||
|   | |||||||
| @@ -1,145 +1,145 @@ | |||||||
| # textdomain: stairs | # textdomain: stairs | ||||||
| Glass Stair=Стеклянная Ступень | Glass Stair=Стеклянные ступени | ||||||
| Glass Slab=Стеклянная Плита | Glass Slab=Стеклянная плита | ||||||
| Inner Glass Stair=Угловая Стеклянная Ступень (Внутренний Угол) | Inner Glass Stair=Внутренние стеклянные ступени | ||||||
| Outer Glass Stair=Угловая Стеклянная Ступень (Внешний Угол) | Outer Glass Stair=Внешние стеклянные ступени | ||||||
| Obsidian Glass Stair=Стеклянная Ступень Из Обсидиана  | Obsidian Glass Stair=Ступени из обсидианового стекла | ||||||
| Obsidian Glass Slab=Стеклянная Плита Из Обсидиана  | Obsidian Glass Slab=Плита из обсидианового стекла | ||||||
| Inner Obsidian Glass Stair=Угловая Стеклянная Ступень Из Обсидиана (Внутренний Угол) | Inner Obsidian Glass Stair=Внутренние ступени из обсидианового стекла | ||||||
| Outer Obsidian Glass Stair=Угловая Стеклянная Ступень Из Обсидиана (Внешний Угол) | Outer Obsidian Glass Stair=Внешние ступени из обсидианового стекла | ||||||
| Wooden Stair=Яблоневая Деревянная Ступень | Wooden Stair=Деревянные ступени | ||||||
| Inner Wooden Stair=Угловая Яблоневая Деревянная Ступень (Внутренний Угол) | Inner Wooden Stair=Внутренние деревянные ступени | ||||||
| Outer Wooden Stair=Угловая Яблоневая Деревянная Ступень (Внешний Угол) | Outer Wooden Stair=Внешние деревянные ступени | ||||||
| Wooden Slab=Яблоневая Деревянная Плита | Wooden Slab=Деревянная плита | ||||||
| Jungle Wood Stair=Тропическая Деревянная Ступень | Jungle Wood Stair=Ступени из тропического дерева | ||||||
| Inner Jungle Wood Stair=Угловая Тропическая Деревянная Ступень (Внутренний Угол) | Inner Jungle Wood Stair=Внутренние ступени из тропического дерева | ||||||
| Outer Jungle Wood Stair=Угловая Тропическая Деревянная Ступень (Внешний Угол) | Outer Jungle Wood Stair=Внешние ступени из тропического дерева | ||||||
| Jungle Wood Slab=Тропическая Деревянная Плита | Jungle Wood Slab=Плита из тропического дерева | ||||||
| Pine Wood Stair=Сосновая Деревянная Ступень | Pine Wood Stair=Сосновые ступени | ||||||
| Inner Pine Wood Stair=Угловая Сосновая Деревянная Ступень (Внутренний Угол) | Inner Pine Wood Stair=Внутренние сосновые ступени | ||||||
| Outer Pine Wood Stair=Угловая Сосновая Деревянная Ступень (Внешний Угол) | Outer Pine Wood Stair=Внешние сосновые ступени | ||||||
| Pine Wood Slab=Сосновая Деревянная Плита | Pine Wood Slab=Сосновая плита | ||||||
| Acacia Wood Stair=Деревянная Ступень Из Акации | Acacia Wood Stair=Акациевые ступени | ||||||
| Inner Acacia Wood Stair=Угловая Деревянная Ступень Из Акации (Внутренний Угол) | Inner Acacia Wood Stair=Внутренние акациевые ступени | ||||||
| Outer Acacia Wood Stair=Угловая Деревянная Ступень Из Акации (Внешний Угол) | Outer Acacia Wood Stair=Внешние акациевые ступени | ||||||
| Acacia Wood Slab=Деревянная Плита Из Акации | Acacia Wood Slab=Акациевая плита | ||||||
| Aspen Wood Stair=Осиновая Деревянная Ступень | Aspen Wood Stair=Осиновые ступени | ||||||
| Inner Aspen Wood Stair=Угловая Осиновая Деревянная Ступень (Внутренний Угол) | Inner Aspen Wood Stair=Внутренние осиновые ступени | ||||||
| Outer Aspen Wood Stair=Угловая осиновая Деревянная Ступень (Внешний Угол) | Outer Aspen Wood Stair=Внешние осиновые ступени | ||||||
| Aspen Wood Slab=Осиновая Деревянная Плита | Aspen Wood Slab=Осиновая плита | ||||||
| Stone Stair=Каменная Ступень | Stone Stair=Каменные ступени | ||||||
| Inner Stone Stair=Угловая Каменная Ступень (Внутренний Угол) | Inner Stone Stair=Внутренние каменные ступени | ||||||
| Outer Stone Stair=Угловая Каменная Ступень (Внешний Угол) | Outer Stone Stair=Внешние каменные ступени | ||||||
| Stone Slab=Каменная Плита | Stone Slab=Каменная плита | ||||||
| Cobblestone Stair=Булыжниковая Ступень | Cobblestone Stair=Булыжниковые ступени | ||||||
| Inner Cobblestone Stair=Угловая Булыжниковая Ступень (Внутренний Угол) | Inner Cobblestone Stair=Внутренние булыжниковые ступени | ||||||
| Outer Cobblestone Stair=Угловая Булыжниковая Ступень (Внешний Угол) | Outer Cobblestone Stair=Внешние булыжниковые ступени | ||||||
| Cobblestone Slab=Булыжниковая Плита | Cobblestone Slab=Булыжниковая плита | ||||||
| Mossy Cobblestone Stair=Мшистая Булыжниковая Ступень | Mossy Cobblestone Stair=Ступени из замшелого булыжника | ||||||
| Inner Mossy Cobblestone Stair=Угловая Мшистая Булыжниковая Ступень (Внутренний Угол) | Inner Mossy Cobblestone Stair=Внутренние ступени из замшелого булыжника | ||||||
| Outer Mossy Cobblestone Stair=Угловая Мшистая Булыжниковая Ступень (Внешний Угол) | Outer Mossy Cobblestone Stair=Внешние ступени из замшелого булыжника | ||||||
| Mossy Cobblestone Slab=Мшистая Булыжниковая Плита | Mossy Cobblestone Slab=Плита из замшелого булыжника | ||||||
| Stone Brick Stair=Cтупень Из Каменных Кирпичей | Stone Brick Stair=Cтупени из каменных кирпичей | ||||||
| Inner Stone Brick Stair=Угловая Ступень Из Каменных Кирпичей (Внутренний Угол) | Inner Stone Brick Stair=Внутренние ступени из каменных кирпичей | ||||||
| Outer Stone Brick Stair=Угловая Ступень Из Каменных Кирпичей (Внешний Угол) | Outer Stone Brick Stair=Внешние ступени из каменных кирпичей | ||||||
| Stone Brick Slab=Плита Из Каменных Кирпичей | Stone Brick Slab=Плита из каменных кирпичей | ||||||
| Stone Block Stair=Ступень Из Каменного Блока | Stone Block Stair=Ступени из камня | ||||||
| Inner Stone Block Stair=Угловая Ступень Из Каменного Блока (Внутренний Угол) | Inner Stone Block Stair=Внутренние ступени из камня | ||||||
| Outer Stone Block Stair=Угловая Ступень Из Каменного Блока (Внешний Угол) | Outer Stone Block Stair=Внешние ступени из камня | ||||||
| Stone Block Slab=Плита Из Каменного Блока | Stone Block Slab=Плита из камня | ||||||
| Desert Stone Stair=Ступень Из Пустынного Камня | Desert Stone Stair=Ступени из пустынного камня | ||||||
| Inner Desert Stone Stair=Угловая Ступень Из Пустынного Камня (Внутренний Угол) | Inner Desert Stone Stair=Внутренние ступени из пустынного камня | ||||||
| Outer Desert Stone Stair=Угловая Ступень Из Пустынного Камня (Внешний Угол) | Outer Desert Stone Stair=Внешние ступени из пустынного камня | ||||||
| Desert Stone Slab=Плита Из Пустынного Камня | Desert Stone Slab=Плита из пустынного камня | ||||||
| Desert Cobblestone Stair=Ступень Из Пустынного Булыжника | Desert Cobblestone Stair=Ступени из пустынного булыжника | ||||||
| Inner Desert Cobblestone Stair=Угловая Ступень Из Пустынного Булыжника (Внутренний Угол) | Inner Desert Cobblestone Stair=Внутренние ступени из пустынного булыжника | ||||||
| Outer Desert Cobblestone Stair=Угловая Ступень Из Пустынного Булыжника (Внешний Угол) | Outer Desert Cobblestone Stair=Внешние ступени из пустынного булыжника | ||||||
| Desert Cobblestone Slab=Плита Из Пустынного Камня | Desert Cobblestone Slab=Плита из пустынного булыжника | ||||||
| Desert Stone Brick Stair=Ступень Из Кирпичей Пустынного Камня | Desert Stone Brick Stair=Ступени из пустынных каменных кирпичей | ||||||
| Inner Desert Stone Brick Stair=Угловая Ступень Из Кирпичей Пустынного Камня (Внутренний Угол) | Inner Desert Stone Brick Stair=Внутренние ступени из пустынных каменных кирпичей | ||||||
| Outer Desert Stone Brick Stair=Угловая Ступень Из Кирпичей Пустынного Камня (Внешний Угол) | Outer Desert Stone Brick Stair=Внешние ступени из пустынных каменных кирпичей | ||||||
| Desert Stone Brick Slab=Плита Из Кирпичей Пустынного Камня | Desert Stone Brick Slab=Плита из пустынных каменных кирпичей | ||||||
| Desert Stone Block Stair=Ступень Из Пустынного Каменного Блока | Desert Stone Block Stair=Ступени из пустынного каменного блока | ||||||
| Inner Desert Stone Block Stair=Угловая Ступень Из Пустынного Каменного Блока (Внутренний Угол) | Inner Desert Stone Block Stair=Внутренние ступени из пустынного каменного блока | ||||||
| Outer Desert Stone Block Stair=Угловая Ступень Из Пустынного Каменного Блока (Внешний Угол) | Outer Desert Stone Block Stair=Внешние ступени из пустынного каменного блока | ||||||
| Desert Stone Block Slab=Плита Из Пустынного Каменного Блока | Desert Stone Block Slab=Плита из пустынного каменного блока | ||||||
| Sandstone Stair=Песчаниковая Ступень | Sandstone Stair=Песчаниковые ступени | ||||||
| Inner Sandstone Stair=Угловая Песчаниковая Ступень (Внутренний Угол) | Inner Sandstone Stair=Внутренние песчаниковые ступени | ||||||
| Outer Sandstone Stair=Угловая Песчаниковая Ступень (Внешний Угол) | Outer Sandstone Stair=Внешние песчаниковые ступени | ||||||
| Sandstone Slab=Песчаниковая Плита | Sandstone Slab=Песчаниковая плита | ||||||
| Sandstone Brick Stair=Ступень Из Песчаниковых Кирпичей | Sandstone Brick Stair=Ступени из песчаниковых кирпичей | ||||||
| Inner Sandstone Brick Stair=Угловая Ступень Из Песчаниковых Кирпичей (Внутренний Угол) | Inner Sandstone Brick Stair=Внутренние ступени из песчаниковых кирпичей | ||||||
| Outer Sandstone Brick Stair=Угловая Ступень Из Песчаниковых Кирпичей  (Внешний Угол) | Outer Sandstone Brick Stair=Внешние ступени из песчаниковых кирпичей | ||||||
| Sandstone Brick Slab=Плита Из Песчаниковых Кирпичей | Sandstone Brick Slab=Плита из песчаниковых кирпичей | ||||||
| Sandstone Block Stair=Ступень Из Песчаникового Блока | Sandstone Block Stair=Ступени из песчаникового блока | ||||||
| Inner Sandstone Block Stair=Угловая Ступень Из Песчаникового Блока (Внутренний Угол) | Inner Sandstone Block Stair=Внутренние ступени из песчаникового блока | ||||||
| Outer Sandstone Block Stair=Угловая Ступень Из Песчаникового Блока (Внешний Угол) | Outer Sandstone Block Stair=Внешние ступени из песчаникового блока | ||||||
| Sandstone Block Slab=Плита Из Песчаникового Блока | Sandstone Block Slab=Плита из песчаникового блока | ||||||
| Desert Sandstone Stair=Ступень Из Пустынного Песчаника | Desert Sandstone Stair=Ступени из пустынного песчаника | ||||||
| Inner Desert Sandstone Stair=Угловая Ступень Из Пустынного Песчаника (Внутренний Угол) | Inner Desert Sandstone Stair=Внутренние ступени из пустынного песчаника | ||||||
| Outer Desert Sandstone Stair=Угловая Ступень Из Пустынного Песчаника (Внешний Угол) | Outer Desert Sandstone Stair=Внешние ступени из пустынного песчаника | ||||||
| Desert Sandstone Slab=Плита Из Пустынного Песчаника | Desert Sandstone Slab=Плита из пустынного песчаника | ||||||
| Desert Sandstone Brick Stair=Ступень Из Кирпичей Пустынного Песчаника | Desert Sandstone Brick Stair=Ступени из пустынных песчаниковых кирпичей | ||||||
| Inner Desert Sandstone Brick Stair=Угловая Ступень Из Кирпичей Пустынного Песчаника (Внутренний Угол) | Inner Desert Sandstone Brick Stair=Внутренние ступени из пустынных песчаниковых кирпичей | ||||||
| Outer Desert Sandstone Brick Stair=Угловая Ступень Из Кирпичей Пустынного Песчаника (Внешний Угол) | Outer Desert Sandstone Brick Stair=Внешние ступени из пустынных песчаниковых кирпичей | ||||||
| Desert Sandstone Brick Slab=Плита Из Кирпичей Пустынного Песчаника | Desert Sandstone Brick Slab=Плита из пустынных песчаниковых кирпичей | ||||||
| Desert Sandstone Block Stair=Ступень Из Пустынного Песчаникового Блока | Desert Sandstone Block Stair=Ступени из пустынного песчаникового блока | ||||||
| Inner Desert Sandstone Block Stair=Угловая Ступень Из Пустынного Песчаникового Блока (Внутренний Угол) | Inner Desert Sandstone Block Stair=Внутренние ступени из пустынного песчаникового блока | ||||||
| Outer Desert Sandstone Block Stair=Угловая Ступень Из Пустынного Песчаникового Блока (Внешний Угол) | Outer Desert Sandstone Block Stair=Внешние ступени из пустынного песчаникового блока | ||||||
| Desert Sandstone Block Slab=Плита Из Пустынного Песчаникового Блока | Desert Sandstone Block Slab=Плита из пустынного песчаникового блока | ||||||
| Silver Sandstone Stair=Ступень Из Серебрянного Песчаника | Silver Sandstone Stair=Ступени из серебристого песчаника | ||||||
| Inner Silver Sandstone Stair=Угловая Ступень Из Серебряного Песчаника (Внутренний Угол) | Inner Silver Sandstone Stair=Внутренние ступени из серебристого песчаника | ||||||
| Outer Silver Sandstone Stair=Угловая Ступень Из Серебряного Песчаника (Внешний Угол) | Outer Silver Sandstone Stair=Внешние ступени из серебристого песчаника | ||||||
| Silver Sandstone Slab=Плита Из Серебряного Песчаника | Silver Sandstone Slab=Плита из серебристого песчаника | ||||||
| Silver Sandstone Brick Stair=Ступень Из Кирпичей Серебряного Песчаника | Silver Sandstone Brick Stair=Ступени из серебристых песчаниковых кирпичей | ||||||
| Inner Silver Sandstone Brick Stair=Угловая Ступень Из Кирпичей Серебряного Песчаника (Внутренний Угол) | Inner Silver Sandstone Brick Stair=Внутренние ступени из серебристых песчаниковых кирпичей | ||||||
| Outer Silver Sandstone Brick Stair=Угловая Ступень Из Кирпичей Серебряного Песчаника (Внешний Угол) | Outer Silver Sandstone Brick Stair=Внешние ступени из серебристых песчаниковых кирпичей | ||||||
| Silver Sandstone Brick Slab=Плита Из Кирпичей Серебряного Песчаника | Silver Sandstone Brick Slab=Плита из серебристых песчаниковых кирпичей | ||||||
| Silver Sandstone Block Stair=Ступень Из Серебряного Песчаникового Блока | Silver Sandstone Block Stair=Ступени из серебристого песчаникового блока | ||||||
| Inner Silver Sandstone Block Stair=Угловая Ступень Из Серебряного Песчаникового Блока (Внутренний Угол) | Inner Silver Sandstone Block Stair=Внутренние ступени из серебристого песчаникового блока | ||||||
| Outer Silver Sandstone Block Stair=Угловая Ступень Из Серебряного Песчаникового Блока (Внешний Угол) | Outer Silver Sandstone Block Stair=Внешние ступени из серебристого песчаникового блока | ||||||
| Silver Sandstone Block Slab=Плита Из Серебряного Песчаникового Блока | Silver Sandstone Block Slab=Плита из серебристого песчаникового блока | ||||||
| Obsidian Stair=Обсидиановая Ступень | Obsidian Stair=Обсидиановые ступени | ||||||
| Inner Obsidian Stair=Угловая Обсидиановая Ступень (Внутренний Угол) | Inner Obsidian Stair=Внутренние обсидиановые ступени | ||||||
| Outer Obsidian Stair=Угловая Обсидиановая Ступень (Внешний Угол) | Outer Obsidian Stair=Внешние обсидиановые ступени | ||||||
| Obsidian Slab=Обсидиановая Плита | Obsidian Slab=Обсидиановая плита | ||||||
| Obsidian Brick Stair=Ступень Из Обсидиановых Кирпичей | Obsidian Brick Stair=Ступени из обсидиановых кирпичей | ||||||
| Inner Obsidian Brick Stair=Угловая Ступень Из Обсидиановых Кирпичей (Внутренний Угол) | Inner Obsidian Brick Stair=Внутренние ступени из обсидиановых кирпичей | ||||||
| Outer Obsidian Brick Stair=Угловая Ступень Из Обсидиановых Кирпичей (Внешний Угол) | Outer Obsidian Brick Stair=Внешние ступени из обсидиановых кирпичей | ||||||
| Obsidian Brick Slab=Плита Из Обсидиановых Кирпичей | Obsidian Brick Slab=Плита из обсидиановых кирпичей | ||||||
| Obsidian Block Stair=Ступень Из Обсидианового Блока | Obsidian Block Stair=Ступени из обсидианового блока | ||||||
| Inner Obsidian Block Stair=Угловая Ступень Из Обсидианового Блока (Внутренний Угол) | Inner Obsidian Block Stair=Внутренние ступени из обсидианового блока | ||||||
| Outer Obsidian Block Stair=Угловая Ступень Из Обсидианового Блока (Внешний Угол) | Outer Obsidian Block Stair=Внешние ступени из обсидианового блока | ||||||
| Obsidian Block Slab=Плита Из Обсидианового Блока | Obsidian Block Slab=Плита из обсидианового блока | ||||||
| Brick Stair=Ступень Из Кирпичей | Brick Stair=Кирпичные ступени | ||||||
| Inner Brick Stair=Угловая Ступень Из Кирпичей (Внутренний Угол) | Inner Brick Stair=Внутренние кирпичные ступени | ||||||
| Outer Brick Stair=Угловая Ступень Из Кирпичей (Внешний Угол) | Outer Brick Stair=Внешние кирпичные ступени | ||||||
| Brick Slab=Плита Из Кирпичей | Brick Slab=Кирпичная плита | ||||||
| Steel Block Stair=Ступень Из Стального Блока | Steel Block Stair=Стальные ступени | ||||||
| Inner Steel Block Stair=Угловая Ступень Из Стального Блока (Внутренний Угол) | Inner Steel Block Stair=Внутренние стальные ступени | ||||||
| Outer Steel Block Stair=Угловая Ступень Из Стального Блока (Внешний Угол) | Outer Steel Block Stair=Внешние стальные ступени | ||||||
| Steel Block Slab=Плита Из Стального Блока | Steel Block Slab=Стальная плита | ||||||
| Tin Block Stair=Ступень Из Оловянного Блока | Tin Block Stair=Оловянные ступени | ||||||
| Inner Tin Block Stair=Угловая Ступень Из Оловянного Блока (Внутренний Угол) | Inner Tin Block Stair=Внутренние оловянные ступени | ||||||
| Outer Tin Block Stair=Угловая Ступень Из Оловянного Блока (Внешний Угол) | Outer Tin Block Stair=Внешние оловянные ступени | ||||||
| Tin Block Slab=Плита Из Оловянного Блока | Tin Block Slab=Оловянная плита | ||||||
| Copper Block Stair=Ступень Из Медного Блока | Copper Block Stair=Медные ступени | ||||||
| Inner Copper Block Stair=Угловая Ступень Из Медного Блока (Внутренний Угол) | Inner Copper Block Stair=Внутренние медные ступени | ||||||
| Outer Copper Block Stair=Угловая Ступень Из Медного Блока (Внешний Угол) | Outer Copper Block Stair=Внешние медные ступени | ||||||
| Copper Block Slab=Плита Из Медного Блока | Copper Block Slab=Медная плита | ||||||
| Bronze Block Stair=Ступень Из Бронзового Блока | Bronze Block Stair=Бронзовые ступени | ||||||
| Inner Bronze Block Stair=Угловая Ступень Из Бронзового Блока (Внутренний Угол) | Inner Bronze Block Stair=Внутренние бронзовые ступени | ||||||
| Outer Bronze Block Stair=Угловая Ступень Из Бронзового Блока (Внешний Угол) | Outer Bronze Block Stair=Внешние бронзовые ступени | ||||||
| Bronze Block Slab=Плита Из Бронзового Блока | Bronze Block Slab=Бронзовая плита | ||||||
| Gold Block Stair=Ступень Из Золотого Блока | Gold Block Stair=Золотые ступени | ||||||
| Inner Gold Block Stair=Угловая Ступень Из Золотого Блока (Внутренний Угол) | Inner Gold Block Stair=Внутренние золотые ступени | ||||||
| Outer Gold Block Stair=Угловая Ступень Из Золотого Блока (Внешний Угол) | Outer Gold Block Stair=Внешние золотые ступени | ||||||
| Gold Block Slab=Плита Из Золотого Блока | Gold Block Slab=Золотая плита | ||||||
| Ice Stair=Ледяная Ступень | Ice Stair=Ледяные ступени | ||||||
| Inner Ice Stair=Угловая Ледяная Ступень (Внутренний Угол) | Inner Ice Stair=Внутренние ледяные ступени | ||||||
| Outer Ice Stair=Угловая Ледяная Ступень (Внешний Угол) | Outer Ice Stair=Внешние ледяные ступени | ||||||
| Ice Slab=Ледяная Плита | Ice Slab=Ледяная плита | ||||||
| Snow Block Stair=Ступень Из Снежного Блока | Snow Block Stair=Снежные ступени | ||||||
| Inner Snow Block Stair=Угловая Ступень Из Снежного Блока (Внутренний Угол) | Inner Snow Block Stair=Внутренние снежные ступени | ||||||
| Outer Snow Block Stair=Угловая Ступень Из Снежного Блока (Внешний Угол) | Outer Snow Block Stair=Внешние снежные ступени | ||||||
| Snow Block Slab=Плита Из Снежного Блока | Snow Block Slab=Снежная плита | ||||||
|   | |||||||
| @@ -159,6 +159,7 @@ local function entity_physics(pos, radius, drops) | |||||||
| 	local objs = minetest.get_objects_inside_radius(pos, radius) | 	local objs = minetest.get_objects_inside_radius(pos, radius) | ||||||
| 	for _, obj in pairs(objs) do | 	for _, obj in pairs(objs) do | ||||||
| 		local obj_pos = obj:get_pos() | 		local obj_pos = obj:get_pos() | ||||||
|  | 		if obj_pos then | ||||||
| 		local dist = math.max(1, vector.distance(pos, obj_pos)) | 		local dist = math.max(1, vector.distance(pos, obj_pos)) | ||||||
|  |  | ||||||
| 		local damage = (4 / dist) * radius | 		local damage = (4 / dist) * radius | ||||||
| @@ -200,6 +201,7 @@ local function entity_physics(pos, radius, drops) | |||||||
| 				end | 				end | ||||||
| 			end | 			end | ||||||
| 		end | 		end | ||||||
|  | 		end | ||||||
| 	end | 	end | ||||||
| end | end | ||||||
|  |  | ||||||
| @@ -625,7 +627,7 @@ function tnt.register_tnt(def) | |||||||
| 			groups = {dig_immediate = 2, mesecon = 2, tnt = 1, flammable = 5}, | 			groups = {dig_immediate = 2, mesecon = 2, tnt = 1, flammable = 5}, | ||||||
| 			sounds = default.node_sound_wood_defaults(), | 			sounds = default.node_sound_wood_defaults(), | ||||||
| 			after_place_node = function(pos, placer) | 			after_place_node = function(pos, placer) | ||||||
| 				if placer:is_player() then | 				if placer and placer:is_player() then | ||||||
| 					local meta = minetest.get_meta(pos) | 					local meta = minetest.get_meta(pos) | ||||||
| 					meta:set_string("owner", placer:get_player_name()) | 					meta:set_string("owner", placer:get_player_name()) | ||||||
| 				end | 				end | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| # textdomain: tnt | # textdomain: tnt | ||||||
| Gun Powder=Pulvo | Gun Powder=Pulvo | ||||||
| TNT Stick=Dinamita Bastono | TNT Stick=Dinamita bastono | ||||||
| TNT=Dinamito | TNT=Dinamito | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| # textdomain: tnt | # textdomain: tnt | ||||||
| Gun Powder=Порох | Gun Powder=Порох | ||||||
| TNT Stick=Тротиловая Палка | TNT Stick=Динамитная шашка | ||||||
| TNT=Тротил | TNT=Динамит | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| # textdomain: vessels | # textdomain: vessels | ||||||
| Empty Vessels Shelf=Malplena Vaza Plataĵo | Empty Vessels Shelf=Malplena vaza plataĵo | ||||||
| Vessels Shelf (@1 items)=Vaza Plataĵo (@1 objektoj) | Vessels Shelf (@1 items)=Vaza plataĵo (@1 objektoj) | ||||||
| Vessels Shelf=Vaza Plataĵo | Vessels Shelf=Vaza plataĵo | ||||||
| Empty Glass Bottle=Malplena Vitra Botelo | Empty Glass Bottle=Malplena vitra botelo | ||||||
| Empty Drinking Glass=Malplena Glaso | Empty Drinking Glass=Malplena glaso | ||||||
| Empty Heavy Steel Bottle=Malplena Peza Ŝtala Botelo | Empty Heavy Steel Bottle=Malplena peza ŝtala botelo | ||||||
| Glass Fragments=Vitraj Eroj | Glass Fragments=Vitraj eroj | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| # textdomain: vessels | # textdomain: vessels | ||||||
| Empty Vessels Shelf=Полка с Пустыми Сосудами | Empty Vessels Shelf=Полка с пустыми сосудами | ||||||
| Vessels Shelf (@1 items)=Полка с Сосудами (@1 предметы) | Vessels Shelf (@1 items)=Полка с сосудами (@1 штук) | ||||||
| Vessels Shelf=Полка с Сосудами | Vessels Shelf=Полка с сосудами | ||||||
| Empty Glass Bottle=Пустая Стеклянная Бутылка | Empty Glass Bottle=Пустая стеклянная бутылка | ||||||
| Empty Drinking Glass=Пустой Стакан | Empty Drinking Glass=Пустой стакан | ||||||
| Empty Heavy Steel Bottle=Пустая Стальная Бутылка | Empty Heavy Steel Bottle=Пустая стальная бутылка | ||||||
| Glass Fragments=Стеклянные Осколки | Glass Fragments=Стеклянные осколки | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| # textdomain: walls | # textdomain: walls | ||||||
| Cobblestone Wall=Pavimŝtona Muro | Cobblestone Wall=Pavimŝtona muro | ||||||
| Mossy Cobblestone Wall=Muska Pavimŝtona Muro | Mossy Cobblestone Wall=Muska pavimŝtona muro | ||||||
| Desert Cobblestone Wall=Dezerta Pavimŝtona Muro | Desert Cobblestone Wall=Dezerta pavimŝtona muro | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| # textdomain: walls | # textdomain: walls | ||||||
| Cobblestone Wall=Булыжниковая Ограда | Cobblestone Wall=Стена из булыжника | ||||||
| Mossy Cobblestone Wall=Мшистая Булыжниковая Ограда | Mossy Cobblestone Wall=Стена из замшелого булыжника | ||||||
| Desert Cobblestone Wall=Ограда Из Пустынного Булыжника | Desert Cobblestone Wall=Стена из пустынного булыжника | ||||||
|   | |||||||
							
								
								
									
										32
									
								
								mods/weather/api.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								mods/weather/api.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | |||||||
|  | local CYCLE = 8 -- Time period of cyclic clouds update in seconds | ||||||
|  |  | ||||||
|  | weather = {} | ||||||
|  |  | ||||||
|  | -- default implementation is empty | ||||||
|  | function weather.get(player) | ||||||
|  | 	return {} | ||||||
|  | end | ||||||
|  |  | ||||||
|  | local function do_update() | ||||||
|  | 	for _, player in ipairs(minetest.get_connected_players()) do | ||||||
|  | 		local params = weather.get(player) | ||||||
|  | 		assert(params ~= nil, "weather.get() must not return nil") | ||||||
|  | 		if params.clouds then | ||||||
|  | 			player:set_clouds(params.clouds) | ||||||
|  | 		end | ||||||
|  | 		if params.lighting then | ||||||
|  | 			player:set_lighting(params.lighting) | ||||||
|  | 		end | ||||||
|  | 	end | ||||||
|  | end | ||||||
|  |  | ||||||
|  | local function cyclic_update() | ||||||
|  | 	do_update() | ||||||
|  | 	minetest.after(CYCLE, cyclic_update) | ||||||
|  | end | ||||||
|  | minetest.after(0, cyclic_update) | ||||||
|  |  | ||||||
|  | -- Update on player join to instantly alter clouds from the default | ||||||
|  | minetest.register_on_joinplayer(function(player) | ||||||
|  | 	do_update() | ||||||
|  | end) | ||||||
| @@ -1,10 +1,13 @@ | |||||||
|  | -- Always load the API | ||||||
|  | dofile(minetest.get_modpath(minetest.get_current_modname()) .. "/api.lua") | ||||||
|  |  | ||||||
| -- Disable by mapgen or setting | -- Disable by mapgen or setting | ||||||
|  |  | ||||||
| local mg_name = minetest.get_mapgen_setting("mg_name") |  | ||||||
| if minetest.settings:get_bool("enable_weather") == false then | if minetest.settings:get_bool("enable_weather") == false then | ||||||
| 	return | 	return | ||||||
| end | end | ||||||
|  |  | ||||||
|  | local mg_name = minetest.get_mapgen_setting("mg_name") | ||||||
| if mg_name == "v6" or mg_name == "singlenode" then | if mg_name == "v6" or mg_name == "singlenode" then | ||||||
| 	-- set a default shadow intensity for mgv6 and singlenode | 	-- set a default shadow intensity for mgv6 and singlenode | ||||||
| 	minetest.register_on_joinplayer(function(player) | 	minetest.register_on_joinplayer(function(player) | ||||||
| @@ -14,10 +17,9 @@ if mg_name == "v6" or mg_name == "singlenode" then | |||||||
| 	return | 	return | ||||||
| end | end | ||||||
|  |  | ||||||
| -- Parameters | -- Default implementation for noise based cloud appearance | ||||||
|  |  | ||||||
| local TSCALE = 600 -- Time scale of noise variation in seconds | local TSCALE = 600 -- Time scale of noise variation in seconds | ||||||
| local CYCLE = 8 -- Time period of cyclic clouds update in seconds |  | ||||||
|  |  | ||||||
| local np_density = { | local np_density = { | ||||||
| 	offset = 0.5, | 	offset = 0.5, | ||||||
| @@ -59,30 +61,30 @@ local np_speedz = { | |||||||
| 	lacunarity = 2, | 	lacunarity = 2, | ||||||
| } | } | ||||||
|  |  | ||||||
| -- End parameters |  | ||||||
|  |  | ||||||
|  |  | ||||||
| -- Initialise noise objects to nil |  | ||||||
|  |  | ||||||
| local nobj_density = nil | local nobj_density = nil | ||||||
| local nobj_thickness = nil | local nobj_thickness = nil | ||||||
| local nobj_speedx = nil | local nobj_speedx = nil | ||||||
| local nobj_speedz = nil | local nobj_speedz = nil | ||||||
|  |  | ||||||
|  |  | ||||||
| -- Update clouds function |  | ||||||
|  |  | ||||||
| local function rangelim(value, lower, upper) | local function rangelim(value, lower, upper) | ||||||
| 	return math.min(math.max(value, lower), upper) | 	return math.min(math.max(value, lower), upper) | ||||||
| end | end | ||||||
|  |  | ||||||
| local os_time_0 = os.time() | local t_offset | ||||||
| local t_offset = math.random(0, 300000) | do | ||||||
|  | 	local meta = minetest.get_mod_storage() | ||||||
|  | 	if meta:contains("time_offset") then | ||||||
|  | 		t_offset = meta:get_int("time_offset") | ||||||
|  | 	else | ||||||
|  | 		-- Use random offset so not each new world behaves the same. | ||||||
|  | 		t_offset = math.random(0, 300000) | ||||||
|  | 		meta:set_int("time_offset", t_offset) | ||||||
|  | 	end | ||||||
|  | end | ||||||
|  |  | ||||||
| local function update_clouds() | function weather.get(player) | ||||||
| 	-- Time in seconds. | 	-- Adjusted time in seconds | ||||||
| 	-- Add random time offset to avoid identical behaviour each server session. | 	local time = math.floor(minetest.get_gametime() - t_offset) | ||||||
| 	local time = os.difftime(os.time(), os_time_0) - t_offset |  | ||||||
|  |  | ||||||
| 	nobj_density = nobj_density or minetest.get_perlin(np_density) | 	nobj_density = nobj_density or minetest.get_perlin(np_density) | ||||||
| 	nobj_thickness = nobj_thickness or minetest.get_perlin(np_thickness) | 	nobj_thickness = nobj_thickness or minetest.get_perlin(np_thickness) | ||||||
| @@ -94,42 +96,28 @@ local function update_clouds() | |||||||
| 	local n_speedx = nobj_speedx:get_2d({x = time, y = 0}) -- -1 to 1 | 	local n_speedx = nobj_speedx:get_2d({x = time, y = 0}) -- -1 to 1 | ||||||
| 	local n_speedz = nobj_speedz:get_2d({x = time, y = 0}) -- -1 to 1 | 	local n_speedz = nobj_speedz:get_2d({x = time, y = 0}) -- -1 to 1 | ||||||
|  |  | ||||||
| 	for _, player in ipairs(minetest.get_connected_players()) do | 	-- Fallback to mid-value 50 for very old worlds | ||||||
| 		-- Fallback to mid-value 50 for very old worlds | 	local humid = minetest.get_humidity(player:get_pos()) or 50 | ||||||
| 		local humid = minetest.get_humidity(player:get_pos()) or 50 | 	-- Default and classic density value is 0.4, make this happen | ||||||
| 		-- Default and classic density value is 0.4, make this happen | 	-- at humidity midvalue 50 when n_density is at midvalue 0.5. | ||||||
| 		-- at humidity midvalue 50 when n_density is at midvalue 0.5. | 	-- density_max = 0.25 at humid = 0. | ||||||
| 		-- density_max = 0.25 at humid = 0. | 	-- density_max = 0.8 at humid = 50. | ||||||
| 		-- density_max = 0.8 at humid = 50. | 	-- density_max = 1.35 at humid = 100. | ||||||
| 		-- density_max = 1.35 at humid = 100. | 	local density_max = 0.8 + ((humid - 50) / 50) * 0.55 | ||||||
| 		local density_max = 0.8 + ((humid - 50) / 50) * 0.55 | 	-- Range limit density_max to always have occasional | ||||||
| 		local density = rangelim(density_max, 0.2, 1.0) * n_density | 	-- small scattered clouds at extreme low humidity. | ||||||
| 		player:set_clouds({ | 	local density = rangelim(density_max, 0.2, 1.0) * n_density | ||||||
| 			-- Range limit density_max to always have occasional |  | ||||||
| 			-- small scattered clouds at extreme low humidity. | 	return { | ||||||
|  | 		clouds = { | ||||||
| 			density = density, | 			density = density, | ||||||
| 			thickness = math.max(math.floor( | 			thickness = math.max(math.floor( | ||||||
| 				rangelim(32 * humid / 100, 8, 32) * n_thickness | 				rangelim(32 * humid / 100, 8, 32) * n_thickness | ||||||
| 				), 2), | 				), 2), | ||||||
| 			speed = {x = n_speedx * 4, z = n_speedz * 4}, | 			speed = {x = n_speedx * 4, z = n_speedz * 4}, | ||||||
| 		}) | 		}, | ||||||
| 		-- now adjust the shadow intensity | 		lighting = { | ||||||
| 		player:set_lighting({ shadows = { intensity = 0.7 * (1 - density) } }) | 			shadows = { intensity = 0.7 * (1 - density) } | ||||||
| 	end | 		} | ||||||
|  | 	} | ||||||
| end | end | ||||||
|  |  | ||||||
|  |  | ||||||
| local function cyclic_update() |  | ||||||
| 	update_clouds() |  | ||||||
| 	minetest.after(CYCLE, cyclic_update) |  | ||||||
| end |  | ||||||
|  |  | ||||||
|  |  | ||||||
| minetest.after(0, cyclic_update) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| -- Update on player join to instantly alter clouds from the default |  | ||||||
|  |  | ||||||
| minetest.register_on_joinplayer(function(player) |  | ||||||
| 	update_clouds() |  | ||||||
| end) |  | ||||||
|   | |||||||
| @@ -1,16 +1,16 @@ | |||||||
| # textdomain: wool | # textdomain: wool | ||||||
| White Wool=Blanka Lano | White Wool=Blanka lano | ||||||
| Grey Wool=Griza Lano | Grey Wool=Griza lano | ||||||
| Dark Grey Wool=Malhela Griza Lano | Dark Grey Wool=Malhela griza lano | ||||||
| Black Wool=Nigra Lano | Black Wool=Nigra lano | ||||||
| Violet Wool=Violkolora Lano | Violet Wool=Violkolora lano | ||||||
| Blue Wool=Blua Lano | Blue Wool=Blua lano | ||||||
| Cyan Wool=Bluverda Lano | Cyan Wool=Bluverda lano | ||||||
| Dark Green Wool=Malhela Verda Lano | Dark Green Wool=Malhela verda lano | ||||||
| Green Wool=Verda Lano | Green Wool=Verda lano | ||||||
| Yellow Wool=Flava Lano | Yellow Wool=Flava lano | ||||||
| Brown Wool=Bruna Lano | Brown Wool=Bruna lano | ||||||
| Orange Wool=Oranĝkolora Lano | Orange Wool=Oranĝkolora lano | ||||||
| Red Wool=Ruĝa Lano | Red Wool=Ruĝa lano | ||||||
| Magenta Wool=Fuksina Lano | Magenta Wool=Fuksina lano | ||||||
| Pink Wool=Rozkolora Lano | Pink Wool=Rozkolora lano | ||||||
|   | |||||||
							
								
								
									
										16
									
								
								mods/wool/locale/wool.pt.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								mods/wool/locale/wool.pt.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | |||||||
|  | # textdomain: wool | ||||||
|  | White Wool=Tecido Branco | ||||||
|  | Grey Wool=Tecido Cinza | ||||||
|  | Dark Grey Wool=Tecido Cinza-escuro | ||||||
|  | Black Wool=Tecido Preto | ||||||
|  | Violet Wool=Tecido Violeta | ||||||
|  | Blue Wool=Tecido Azul | ||||||
|  | Cyan Wool=Tecido Ciano | ||||||
|  | Dark Green Wool=Tecido Verde-escuro | ||||||
|  | Green Wool=Tecido Verde | ||||||
|  | Yellow Wool=Tecido Amarelo | ||||||
|  | Brown Wool=Tecido Marrom | ||||||
|  | Orange Wool=Tecido Laranja | ||||||
|  | Red Wool=Tecido Vermelho | ||||||
|  | Magenta Wool=Tecido Magenta | ||||||
|  | Pink Wool=Tecido Rosa | ||||||
| @@ -1,16 +1,16 @@ | |||||||
| # textdomain: wool | # textdomain: wool | ||||||
| White Wool=Lã Branca | White Wool=Tecido Branco | ||||||
| Grey Wool=Lã Cinza | Grey Wool=Tecido Cinza | ||||||
| Dark Grey Wool=Lã Cinza-escuro | Dark Grey Wool=Tecido Cinza-escuro | ||||||
| Black Wool=Lã Preta | Black Wool=Tecido Preto | ||||||
| Violet Wool=Lã Violeta | Violet Wool=Tecido Violeta | ||||||
| Blue Wool=Lã Azul | Blue Wool=Tecido Azul | ||||||
| Cyan Wool=Lã Ciano | Cyan Wool=Tecido Ciano | ||||||
| Dark Green Wool=Lã Verde-escuro | Dark Green Wool=Tecido Verde-escuro | ||||||
| Green Wool=Lã Verde | Green Wool=Tecido Verde | ||||||
| Yellow Wool=Lã Amarela | Yellow Wool=Tecido Amarelo | ||||||
| Brown Wool=Lã Marrom | Brown Wool=Tecido Marrom | ||||||
| Orange Wool=Lã Laranja | Orange Wool=Tecido Laranja | ||||||
| Red Wool=Lã Vermelha | Red Wool=Tecido Vermelho | ||||||
| Magenta Wool=Lã Magenta | Magenta Wool=Tecido Magenta | ||||||
| Pink Wool=Lã Rosa | Pink Wool=Tecido Rosa | ||||||
|   | |||||||
| @@ -1,16 +1,16 @@ | |||||||
| # textdomain: wool | # textdomain: wool | ||||||
| White Wool=Белая Шерсть | White Wool=Белая шерсть | ||||||
| Grey Wool=Серая Шерсть | Grey Wool=Серая шерсть | ||||||
| Dark Grey Wool=Тёмно-Серая Шерсть | Dark Grey Wool=Тёмно-Серая шерсть | ||||||
| Black Wool=Чёрная Шерсть | Black Wool=Чёрная шерсть | ||||||
| Violet Wool=Фиолетовая Шерсть | Violet Wool=Фиолетовая шерсть | ||||||
| Blue Wool=Синяя Шерсть | Blue Wool=Синяя шерсть | ||||||
| Cyan Wool=Голубая Шерсть | Cyan Wool=Бирюзовая шерсть | ||||||
| Dark Green Wool=Тёмно-Зелёная Шерсть | Dark Green Wool=Тёмно-Зелёная шерсть | ||||||
| Green Wool=Зелёная Шерсть | Green Wool=Зелёная шерсть | ||||||
| Yellow Wool=Жёлтая Шерсть | Yellow Wool=Жёлтая шерсть | ||||||
| Brown Wool=Коричневая Шерсть | Brown Wool=Коричневая шерсть | ||||||
| Orange Wool=Оранжевая Шерсть | Orange Wool=Оранжевая шерсть | ||||||
| Red Wool=Красная Шерсть | Red Wool=Красная шерсть | ||||||
| Magenta Wool=Пурпурная Шерсть | Magenta Wool=Сиреневая шерсть | ||||||
| Pink Wool=Розовая Шерсть | Pink Wool=Розовая шерсть | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| # textdomain: xpanes | # textdomain: xpanes | ||||||
| Glass Pane=Vitra Vitraĵo | Glass Pane=Vitra vitraĵo | ||||||
| Obsidian Glass Pane=Obsidiana Vitra Vitraĵo | Obsidian Glass Pane=Obsidiana vitra vitraĵo | ||||||
| Steel Bars=Ŝtalaj Baraĵoj | Steel Bars=Ŝtalaj baraĵoj | ||||||
| Steel Bar Door=Ŝtala Baraĵa Pordo | Steel Bar Door=Ŝtala baraĵa pordo | ||||||
| Steel Bar Trapdoor=Ŝtala Baraĵa Plankpordo | Steel Bar Trapdoor=Ŝtala baraĵa plankpordo | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| # textdomain: xpanes | # textdomain: xpanes | ||||||
| Glass Pane=Стеклянная Панель | Glass Pane=Стеклянная панель | ||||||
| Obsidian Glass Pane=Стеклянная Панель Из Обсидиана | Obsidian Glass Pane=Панель из обсидианового стекла | ||||||
| Steel Bars=Стальная Решётка | Steel Bars=Стальная решетка | ||||||
| Steel Bar Door=Стальная Решётчатая Дверь | Steel Bar Door=Стальная решётчатая дверь | ||||||
| Steel Bar Trapdoor=Стальной Решётчатый Люк | Steel Bar Trapdoor=Стальной решётчатый люк | ||||||
|   | |||||||
| @@ -2045,9 +2045,9 @@ mts_save("aspen_log", { | |||||||
|  |  | ||||||
| -- Large cactus | -- Large cactus | ||||||
|  |  | ||||||
| local C = {name = "default:cactus", prob = 255, param2 = 20} | local C = {name = "default:cactus", prob = 255} | ||||||
| local R = {name = "default:cactus", prob = 255, param2 = 20, force_place = true} | local R = {name = "default:cactus", prob = 255, force_place = true} | ||||||
| local E = {name = "default:cactus", prob = 127, param2 = 20} | local E = {name = "default:cactus", prob = 127} | ||||||
|  |  | ||||||
| mts_save("large_cactus", { | mts_save("large_cactus", { | ||||||
| 	size = {x = 5, y = 7, z = 5}, | 	size = {x = 5, y = 7, z = 5}, | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								utils/test/minetest.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								utils/test/minetest.conf
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | |||||||
|  | minetest_game_smoke_test = true | ||||||
|  | random_mod_load_order = true | ||||||
							
								
								
									
										19
									
								
								utils/test/run.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										19
									
								
								utils/test/run.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,19 @@ | |||||||
|  | #!/bin/bash -e | ||||||
|  | world=$(mktemp -d) | ||||||
|  | trap 'rm -rf "$world" || :' EXIT | ||||||
|  |  | ||||||
|  | [ -f game.conf ] || { echo "Must be run in game root folder." >&2; exit 1; } | ||||||
|  |  | ||||||
|  | chmod -R 777 "$world" # container uses unprivileged user inside | ||||||
|  |  | ||||||
|  | vol=( | ||||||
|  | 	-v "$PWD/utils/test/minetest.conf":/etc/minetest/minetest.conf | ||||||
|  | 	--tmpfs /var/lib/minetest/.minetest | ||||||
|  | 	-v "$PWD":/var/lib/minetest/.minetest/games/minetest_game | ||||||
|  | 	-v "$world":/var/lib/minetest/.minetest/world | ||||||
|  | ) | ||||||
|  | [ -z "$DOCKER_IMAGE" ] && DOCKER_IMAGE="ghcr.io/minetest/minetest:master" | ||||||
|  | docker run --rm -i "${vol[@]}" "$DOCKER_IMAGE" --config /etc/minetest/minetest.conf --gameid minetest | ||||||
|  |  | ||||||
|  | test -f "$world/map.sqlite" || exit 1 | ||||||
|  | exit 0 | ||||||
		Reference in New Issue
	
	Block a user