Compare commits
	
		
			135 Commits
		
	
	
		
			nalc-1.3
			...
			experiment
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 72da1cde3a | |||
| 
						 | 
					508a9070a0 | ||
| 75858968ab | |||
| 
						 | 
					aff9c28eed | ||
| 
						 | 
					e903b1f6d0 | ||
| 
						 | 
					2bdc7c8c7d | ||
| 
						 | 
					c744829ce5 | ||
| 
						 | 
					06daee4c6d | ||
| 
						 | 
					697b028e43 | ||
| 
						 | 
					e229236bc2 | ||
| 
						 | 
					350c52319e | ||
| 
						 | 
					b64868ef92 | ||
| 
						 | 
					79d38078a5 | ||
| 
						 | 
					986b65775f | ||
| 
						 | 
					d7dd15782c | ||
| 
						 | 
					b4392aeb1f | ||
| 
						 | 
					54dc58ef1f | ||
| 
						 | 
					b57700a75b | ||
| 93c1287cf1 | |||
| 
						 | 
					b0cf061360 | ||
| 
						 | 
					33650c8c2e | ||
| 
						 | 
					e86d0dff94 | ||
| 
						 | 
					5549b9585d | ||
| 
						 | 
					d294ef757e | ||
| 
						 | 
					0ad8222b97 | ||
| 
						 | 
					38307da22a | ||
| 
						 | 
					0c2ee1e41d | ||
| 
						 | 
					edd033b708 | ||
| 
						 | 
					9528c0f8b9 | ||
| 
						 | 
					638099c999 | ||
| 
						 | 
					659895c3ed | ||
| 
						 | 
					ce82241ab2 | ||
| 
						 | 
					0110e01826 | ||
| 
						 | 
					268a8844b6 | ||
| 
						 | 
					f665382017 | ||
| 
						 | 
					a6f3b89596 | ||
| 2d6d4adfd7 | |||
| 
						 | 
					240f9a6a85 | ||
| 
						 | 
					a840ac0a4d | ||
| 
						 | 
					584a6a2102 | ||
| 
						 | 
					e02e55fafd | ||
| 
						 | 
					a23819f4fe | ||
| 
						 | 
					cc3e7be429 | ||
| 
						 | 
					172b62f802 | ||
| 
						 | 
					a5547a3a76 | ||
| 
						 | 
					c8a1454e2b | ||
| 
						 | 
					bcd1ee048e | ||
| 
						 | 
					fff3b98ab0 | ||
| 
						 | 
					40861c9e4f | ||
| 
						 | 
					0c1252bcf5 | ||
| 
						 | 
					760581b330 | ||
| 
						 | 
					acc918436a | ||
| 
						 | 
					6623dec567 | ||
| 
						 | 
					75f9575557 | ||
| 
						 | 
					78de12d6b4 | ||
| 
						 | 
					d775a9bdae | ||
| 
						 | 
					60389a1539 | ||
| 
						 | 
					3aaabce7a4 | ||
| 
						 | 
					ad183c48ee | ||
| 
						 | 
					2361987421 | ||
| 
						 | 
					5875820542 | ||
| 
						 | 
					31f7d57889 | ||
| 
						 | 
					02ec133392 | ||
| 
						 | 
					1309953da6 | ||
| 
						 | 
					5273fcb3ad | ||
| 
						 | 
					f2bc5e2c67 | ||
| 
						 | 
					4b8b33587c | ||
| 
						 | 
					953fcfe09e | ||
| 
						 | 
					21e5f68292 | ||
| 
						 | 
					92701885d0 | ||
| 
						 | 
					c96cc55c40 | ||
| 
						 | 
					70500943f3 | ||
| 
						 | 
					ddebdeccb1 | ||
| 
						 | 
					71ea0c65ea | ||
| 
						 | 
					642fde44f1 | ||
| 
						 | 
					1c78666c56 | ||
| 
						 | 
					8158926862 | ||
| 
						 | 
					4945f4bf9a | ||
| 
						 | 
					79e63a8496 | ||
| 
						 | 
					c6171a8f29 | ||
| bb2876eebf | |||
| 41c2045fb0 | |||
| 
						 | 
					42baede13f | ||
| 
						 | 
					0a90bd8a0e | ||
| 
						 | 
					34bb232052 | ||
| 250ef99721 | |||
| 
						 | 
					dd7eed952e | ||
| 
						 | 
					2c9733ac45 | ||
| 
						 | 
					b6377a7c0e | ||
| 
						 | 
					73ea8e2e91 | ||
| 
						 | 
					46136bbf19 | ||
| 
						 | 
					6bd059915c | ||
| 
						 | 
					624dafc12b | ||
| 
						 | 
					3d95fceee8 | ||
| 
						 | 
					aa9cc39317 | ||
| 
						 | 
					08b13c9efb | ||
| 
						 | 
					c1b236b4e3 | ||
| 
						 | 
					9d419bfac6 | ||
| 
						 | 
					6a9cbcad82 | ||
| 
						 | 
					ecfebe3c17 | ||
| 
						 | 
					3fdd5cdb5f | ||
| 
						 | 
					e1e793d4da | ||
| 
						 | 
					b648af479f | ||
| 
						 | 
					87f6b941c4 | ||
| 
						 | 
					1ade8941b4 | ||
| 
						 | 
					e6aec880de | ||
| 
						 | 
					9c29019301 | ||
| 
						 | 
					a1a50673c8 | ||
| 
						 | 
					0232288d5e | ||
| 
						 | 
					7ae983b669 | ||
| 
						 | 
					29866dbcb3 | ||
| 5e35fdc2a9 | |||
| 
						 | 
					2e7b509a94 | ||
| 
						 | 
					226e2d4c12 | ||
| 
						 | 
					0a950c9932 | ||
| 
						 | 
					2953bf2bd6 | ||
| 
						 | 
					331bbae058 | ||
| 
						 | 
					720d4c8e3f | ||
| 
						 | 
					6605724fe1 | ||
| 
						 | 
					dd91a1bfe5 | ||
| 
						 | 
					5348d6e5bc | ||
| 
						 | 
					4c145bf9aa | ||
| 
						 | 
					63cffc4bd1 | ||
| 
						 | 
					1d3feba732 | ||
| 
						 | 
					8d0fb34fb0 | ||
| 
						 | 
					268f869e67 | ||
| 
						 | 
					25bf3fdc9c | ||
| 
						 | 
					befed5525a | ||
| 
						 | 
					1da168b3c3 | ||
| 
						 | 
					5d0e4aef45 | ||
| 
						 | 
					686fdb5c06 | ||
| 
						 | 
					0a96bac46d | ||
| 
						 | 
					4858c2b3fb | ||
| 
						 | 
					12f75ab803 | ||
| 
						 | 
					e193f9fda3 | 
							
								
								
									
										16
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,16 @@
 | 
			
		||||
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
 | 
			
		||||
							
								
								
									
										11
									
								
								.travis.yml
									
									
									
									
									
								
							
							
						
						@@ -1,11 +0,0 @@
 | 
			
		||||
language: generic
 | 
			
		||||
addons:
 | 
			
		||||
  apt:
 | 
			
		||||
    packages:
 | 
			
		||||
    - luarocks
 | 
			
		||||
before_install:
 | 
			
		||||
  - luarocks install --local luacheck
 | 
			
		||||
script:
 | 
			
		||||
- $HOME/.luarocks/bin/luacheck ./mods
 | 
			
		||||
notifications:
 | 
			
		||||
  email: false
 | 
			
		||||
							
								
								
									
										24
									
								
								README.md
									
									
									
									
									
								
							
							
						
						@@ -2,30 +2,28 @@
 | 
			
		||||
 | 
			
		||||
The default game bundled in the Minetest engine.
 | 
			
		||||
 | 
			
		||||
For further information, check 
 | 
			
		||||
[this forum topic](https://forum.minetest.net/viewtopic.php?f=15&t=9724).   
 | 
			
		||||
Also see the [Minetest Wiki](https://wiki.minetest.net/Subgames/Minetest_Game) 
 | 
			
		||||
for more information.
 | 
			
		||||
For further information, check [this forum topic](https://forum.minetest.net/viewtopic.php?f=15&t=9724).
 | 
			
		||||
 | 
			
		||||
Also see the [Minetest Wiki](https://wiki.minetest.net/Subgames/Minetest_Game) for more information.
 | 
			
		||||
 | 
			
		||||
## Installation
 | 
			
		||||
 | 
			
		||||
- Unzip the archive, rename the folder to minetest_game and
 | 
			
		||||
place it in .. minetest/games/
 | 
			
		||||
- Unzip the archive, rename the folder to `minetest_game` and
 | 
			
		||||
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/`.
 | 
			
		||||
 | 
			
		||||
The Minetest engine can be found at [GitHub](https://github.com/minetest/minetest).
 | 
			
		||||
 | 
			
		||||
For further information or help, see:  
 | 
			
		||||
https://wiki.minetest.net/Installing_Mods
 | 
			
		||||
For further information or help, see: [Installing Mods](https://wiki.minetest.net/Installing_Mods).
 | 
			
		||||
 | 
			
		||||
## Compatibility
 | 
			
		||||
 | 
			
		||||
The Minetest Game GitHub master HEAD is generally compatible with the GitHub
 | 
			
		||||
master HEAD of the Minetest engine.  
 | 
			
		||||
The Minetest Game GitHub `master` `HEAD` is generally compatible with the GitHub
 | 
			
		||||
`master` `HEAD` of the Minetest engine.
 | 
			
		||||
 | 
			
		||||
Additionally, when the Minetest engine is tagged to be a certain version (e.g.
 | 
			
		||||
0.4.10), Minetest Game is tagged with the version too.
 | 
			
		||||
`0.4.10`), Minetest Game is tagged with the version, too.
 | 
			
		||||
 | 
			
		||||
When stable releases are made, Minetest Game and the Minetest engine is packaged 
 | 
			
		||||
and made available at [www.minetest.net](https://www.minetest.net/downloads/).
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,3 @@
 | 
			
		||||
name = Notre Ami Le Cube 1.2
 | 
			
		||||
title = Notre Ami Le Cube 1.6
 | 
			
		||||
author = Minetest and Sys4
 | 
			
		||||
description = Minetest game slightly modified by Sys4
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										145
									
								
								game_api.txt
									
									
									
									
									
								
							
							
						
						@@ -218,6 +218,8 @@ The doors mod allows modders to register custom doors and trapdoors.
 | 
			
		||||
	description = "Door description",
 | 
			
		||||
	inventory_image = "mod_door_inv.png",
 | 
			
		||||
	groups = {choppy = 2},
 | 
			
		||||
	model = "mod_door", -- (optional)
 | 
			
		||||
	-- Model name without a suffix ("big_door" not "big_door_a.obj", "big_door_b.obj")
 | 
			
		||||
	tiles = {"mod_door.png"}, -- UV map.
 | 
			
		||||
	-- The front and back of the door must be identical in appearence as they swap on
 | 
			
		||||
	-- open/close.
 | 
			
		||||
@@ -225,14 +227,20 @@ The doors mod allows modders to register custom doors and trapdoors.
 | 
			
		||||
	sounds = default.node_sound_wood_defaults(), -- optional
 | 
			
		||||
	sound_open = sound play for open door, -- optional
 | 
			
		||||
	sound_close = sound play for close door, -- optional
 | 
			
		||||
	gain_open = 0.3, -- optional, defaults to 0.3
 | 
			
		||||
	gain_close = 0.3, -- optional, defaults to 0.3
 | 
			
		||||
	protected = false, -- If true, only placer can open the door (locked for others)
 | 
			
		||||
	on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) 
 | 
			
		||||
	on_rightclick = function(pos, node, clicker, itemstack, pointed_thing), 
 | 
			
		||||
	-- optional function containing the on_rightclick callback, defaults to a doors.door_toggle-wrapper
 | 
			
		||||
	use_texture_alpha = "clip",
 | 
			
		||||
 | 
			
		||||
### Trapdoor definition
 | 
			
		||||
 | 
			
		||||
	description = "Trapdoor description",
 | 
			
		||||
	inventory_image = "mod_trapdoor_inv.png",
 | 
			
		||||
	nodebox_closed = {} -- Nodebox for closed model
 | 
			
		||||
	nodebox_opened = {} -- Nodebox for opened model
 | 
			
		||||
	-- (optional) both nodeboxes must be used, not one only
 | 
			
		||||
	groups = {choppy = 2},
 | 
			
		||||
	tile_front = "doors_trapdoor.png", -- the texture for the front and back of the trapdoor
 | 
			
		||||
	tile_side = "doors_trapdoor_side.png",
 | 
			
		||||
@@ -244,11 +252,12 @@ The doors mod allows modders to register custom doors and trapdoors.
 | 
			
		||||
	sounds = default.node_sound_wood_defaults(), -- optional
 | 
			
		||||
	sound_open = sound play for open door, -- optional
 | 
			
		||||
	sound_close = sound play for close door, -- optional
 | 
			
		||||
	gain_open = 0.3, -- optional, defaults to 0.3
 | 
			
		||||
	gain_close = 0.3, -- optional, defaults to 0.3
 | 
			
		||||
	protected = false, -- If true, only placer can open the door (locked for others)
 | 
			
		||||
	on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) 
 | 
			
		||||
	-- function containing the on_rightclick callback
 | 
			
		||||
	on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) 
 | 
			
		||||
	on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) ,
 | 
			
		||||
	-- function containing the on_rightclick callback
 | 
			
		||||
	use_texture_alpha = "clip",
 | 
			
		||||
 | 
			
		||||
### Fence gate definition
 | 
			
		||||
 | 
			
		||||
@@ -426,63 +435,83 @@ Give Initial Stuff API
 | 
			
		||||
^ Adds items to the list of items to be given
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Players API
 | 
			
		||||
-----------
 | 
			
		||||
Player API
 | 
			
		||||
----------
 | 
			
		||||
 | 
			
		||||
The player API can register player models and update the player's appearance.
 | 
			
		||||
 | 
			
		||||
* `player_api.globalstep(dtime, ...)`
 | 
			
		||||
	* The function called by the globalstep that controls player animations.
 | 
			
		||||
	  You can override this to replace the globalstep with your own implementation.
 | 
			
		||||
	* Receives all args that minetest.register_globalstep() passes
 | 
			
		||||
 | 
			
		||||
* `player_api.register_model(name, def)`
 | 
			
		||||
	* Register a new model to be used by players
 | 
			
		||||
	* name: model filename such as "character.x", "foo.b3d", etc.
 | 
			
		||||
	* def: See [#Model definition]
 | 
			
		||||
    * saved to player_api.registered_models
 | 
			
		||||
	* `name`: model filename such as "character.x", "foo.b3d", etc.
 | 
			
		||||
	* `def`: see [#Model definition]
 | 
			
		||||
	* Saved to player_api.registered_models
 | 
			
		||||
 | 
			
		||||
* `player_api.registered_player_models[name]`
 | 
			
		||||
* `player_api.registered_models[name]`
 | 
			
		||||
	* Get a model's definition
 | 
			
		||||
	 * see [#Model definition]
 | 
			
		||||
	* `name`: model filename
 | 
			
		||||
	* See [#Model definition]
 | 
			
		||||
 | 
			
		||||
* `player_api.set_model(player, model_name)`
 | 
			
		||||
	* Change a player's model
 | 
			
		||||
	* `player`: PlayerRef
 | 
			
		||||
	* `model_name`: model registered with player_api.register_model()
 | 
			
		||||
	* `model_name`: model registered with `player_api.register_model`
 | 
			
		||||
 | 
			
		||||
* `player_api.set_animation(player, anim_name [, speed])`
 | 
			
		||||
	* Applies an animation to a player
 | 
			
		||||
	* anim_name: name of the animation.
 | 
			
		||||
	* speed: frames per second. If nil, default from the model is used
 | 
			
		||||
* `player_api.set_animation(player, anim_name, speed)`
 | 
			
		||||
	* Applies an animation to a player if speed or anim_name differ from the currently playing animation
 | 
			
		||||
	* `player`: PlayerRef
 | 
			
		||||
	* `anim_name`: name of the animation
 | 
			
		||||
	* `speed`: keyframes per second. If nil, the default from the model def is used
 | 
			
		||||
 | 
			
		||||
* `player_api.set_textures(player, textures)`
 | 
			
		||||
	* Sets player textures
 | 
			
		||||
	* `player`: PlayerRef
 | 
			
		||||
	* `textures`: array of textures, If `textures` is nil the default
 | 
			
		||||
	  textures from the model def are used
 | 
			
		||||
	* `textures`: array of textures. If nil, the default from the model def is used
 | 
			
		||||
 | 
			
		||||
* `player_api.set_textures(player, index, texture)`
 | 
			
		||||
	* Sets one of the player textures
 | 
			
		||||
	* `player`: PlayerRef
 | 
			
		||||
	* `index`: Index into array of all textures
 | 
			
		||||
	* `texture`: the texture string
 | 
			
		||||
 | 
			
		||||
* `player_api.get_animation(player)`
 | 
			
		||||
	* Returns a table containing fields `model`, `textures` and `animation`.
 | 
			
		||||
	* Any of the fields of the returned table may be nil.
 | 
			
		||||
	* player: PlayerRef
 | 
			
		||||
	* Returns a table containing fields `model`, `textures` and `animation`
 | 
			
		||||
	* Any of the fields of the returned table may be nil
 | 
			
		||||
	* `player`: PlayerRef
 | 
			
		||||
 | 
			
		||||
* `player_api.player_attached`
 | 
			
		||||
	* A table that maps a player name to a boolean.
 | 
			
		||||
	* If the value for a given player is set to true, the default player
 | 
			
		||||
	animations (walking, digging, ...) will no longer be updated.
 | 
			
		||||
	Knockback from damage is also prevented for that player.
 | 
			
		||||
	* A table that maps a player name to a boolean
 | 
			
		||||
	* If the value for a given player is set to true, the default player animations
 | 
			
		||||
	  (walking, digging, ...) will no longer be updated, and knockback from damage is
 | 
			
		||||
	  prevented for that player
 | 
			
		||||
	* Example of usage: A mod sets a player's value to true when attached to a vehicle
 | 
			
		||||
 | 
			
		||||
### Model Definition
 | 
			
		||||
 | 
			
		||||
	{
 | 
			
		||||
		animation_speed = 30,            -- Default animation speed, in FPS.
 | 
			
		||||
		textures = {"character.png", },  -- Default array of textures.
 | 
			
		||||
		visual_size = {x = 1, y = 1},    -- Used to scale the model.
 | 
			
		||||
		animation_speed = 30,           -- Default animation speed, in keyframes per second
 | 
			
		||||
		textures = {"character.png"},   -- Default array of textures
 | 
			
		||||
		animations = {
 | 
			
		||||
			-- <anim_name> = {x = <start_frame>, y = <end_frame>},
 | 
			
		||||
			foo = {x = 0, y = 19},
 | 
			
		||||
			bar = {x = 20, y = 39},
 | 
			
		||||
			-- ...
 | 
			
		||||
			-- [anim_name] = {
 | 
			
		||||
			--   x = <start_frame>,
 | 
			
		||||
			--   y = <end_frame>,
 | 
			
		||||
			--   collisionbox = <model collisionbox>, -- (optional)
 | 
			
		||||
			--   eye_height = <model eye height>,     -- (optional)
 | 
			
		||||
			--   -- suspend client side animations while this one is active (optional)
 | 
			
		||||
			--   override_local = <true/false>
 | 
			
		||||
			-- },
 | 
			
		||||
			stand = ..., lay = ..., walk = ..., mine = ..., walk_mine = ..., -- required animations
 | 
			
		||||
			sit = ... -- used by boats and other MTG mods
 | 
			
		||||
		},
 | 
			
		||||
		collisionbox = {-0.3, 0.0, -0.3, 0.3, 1.7, 0.3}, -- In nodes from feet position
 | 
			
		||||
		stepheight = 0.6, -- In nodes
 | 
			
		||||
		eye_height = 1.47, -- In nodes above feet position
 | 
			
		||||
		-- Default object properties, see lua_api.txt
 | 
			
		||||
		visual_size = {x = 1, y = 1},
 | 
			
		||||
		collisionbox = {-0.3, 0.0, -0.3, 0.3, 1.7, 0.3},
 | 
			
		||||
		stepheight = 0.6,
 | 
			
		||||
		eye_height = 1.47
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -717,6 +746,12 @@ Stairs API
 | 
			
		||||
The stairs API lets you register stairs and slabs and ensures that they are registered the same way as those
 | 
			
		||||
delivered with Minetest Game, to keep them compatible with other mods.
 | 
			
		||||
 | 
			
		||||
The following node attributes are sourced from the recipeitem:
 | 
			
		||||
 * use_texture_alpha
 | 
			
		||||
 * sunlight_propagates
 | 
			
		||||
 * light_source
 | 
			
		||||
 * If the recipeitem is a fuel, the stair/slab is also registered as a fuel of proportionate burntime.
 | 
			
		||||
 | 
			
		||||
`stairs.register_stair(subname, recipeitem, groups, images, description, sounds, worldaligntex)`
 | 
			
		||||
 | 
			
		||||
 * Registers a stair
 | 
			
		||||
@@ -763,12 +798,18 @@ delivered with Minetest Game, to keep them compatible with other mods.
 | 
			
		||||
 * `worldaligntex`: A bool to set all textures world-aligned. Default false. See [Tile definition]
 | 
			
		||||
 * `full_description`: Overrides the description, bypassing string concatenation. This is useful for translation. (optional)
 | 
			
		||||
 | 
			
		||||
`stairs.register_stair_and_slab(subname, recipeitem, groups, images, desc_stair, desc_slab, sounds, worldaligntex)`
 | 
			
		||||
```
 | 
			
		||||
stairs.register_stair_and_slab(subname, recipeitem, groups, images, desc_stair, desc_slab,
 | 
			
		||||
	sounds, worldaligntex, desc_stair_inner, desc_stair_outer)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 * A wrapper for stairs.register_stair, stairs.register_slab, stairs.register_stair_inner, stairs.register_stair_outer
 | 
			
		||||
 * Uses almost the same arguments as stairs.register_stair
 | 
			
		||||
 * `desc_stair`: Description for stair nodes. For corner stairs 'Inner' or 'Outer' will be prefixed
 | 
			
		||||
 * `desc_stair`: Description for stair nodes. For corner stairs 'Inner' or 'Outer' will be prefixed unless
 | 
			
		||||
 	`desc_stair_inner` or `desc_stair_outer` are specified, which are used instead.
 | 
			
		||||
 * `desc_slab`: Description for slab node
 | 
			
		||||
 * `desc_stair_inner`: Description for inner stair node
 | 
			
		||||
 * `desc_stair_outer`: Description for outer stair node
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Xpanes API
 | 
			
		||||
@@ -1074,3 +1115,33 @@ This function registers a shapeless recipe that takes `ingredient`
 | 
			
		||||
and `result` as input and outputs `result`.
 | 
			
		||||
 | 
			
		||||
The metadata of the input `result` is copied to the output `result`.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Log API
 | 
			
		||||
-------
 | 
			
		||||
 | 
			
		||||
Logs action of the player with a node at a certain position.
 | 
			
		||||
By default only actions of real players are logged.
 | 
			
		||||
Actions of non-players (usually machines) are logged only when
 | 
			
		||||
setting `log_non_player_actions` is enabled.
 | 
			
		||||
A player is considered non-player if `player:is_player()` returns
 | 
			
		||||
`false` or `player.is_fake_player` is truthy. The use of
 | 
			
		||||
`is_fake_player` is an unofficial standard between mods.
 | 
			
		||||
These non-players are marked by the content of `is_fake_player`
 | 
			
		||||
(if it is a string) or a "*" in brackets after the player name in
 | 
			
		||||
the log.
 | 
			
		||||
 | 
			
		||||
`default.log_player_action(player, ...)`
 | 
			
		||||
 | 
			
		||||
 * `player`        The player who performed the action
 | 
			
		||||
 * `message_parts` Any mumber of message parts describing the action
 | 
			
		||||
                   in 3rd person singular present tense. It can also
 | 
			
		||||
                   contain a `pos` which is logged as "(X,Y,Z)"
 | 
			
		||||
 | 
			
		||||
`default.set_inventory_action_loggers(def, name)`
 | 
			
		||||
 | 
			
		||||
 * sets the callbacks `on_metadata_inventory_move`,
 | 
			
		||||
   `on_metadata_inventory_put` and `on_metadata_inventory_take`
 | 
			
		||||
   that log corresponding actions
 | 
			
		||||
 * `def`     See [Node definition]
 | 
			
		||||
 * `name`    Description of the node in the log message
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								menu/header.png
									
									
									
									
									
								
							
							
						
						| 
		 Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 935 B  | 
@@ -0,0 +1,76 @@
 | 
			
		||||
# This file contains settings of Minetest Game that can be changed in
 | 
			
		||||
# minetest.conf.
 | 
			
		||||
# By default, all the settings are commented and not functional.
 | 
			
		||||
# Uncomment settings by removing the preceding #.
 | 
			
		||||
 | 
			
		||||
# Whether creative mode (fast digging of all blocks, unlimited resources) should
 | 
			
		||||
# be enabled.
 | 
			
		||||
creative_mode = false
 | 
			
		||||
 | 
			
		||||
# Sets the behaviour of the inventory items when a player dies.
 | 
			
		||||
#   bones: Store items in a bone node but drop items if inside protected area.
 | 
			
		||||
#   drop: Drop items on the ground.
 | 
			
		||||
#   keep: Player keeps items.
 | 
			
		||||
bones_mode = bones
 | 
			
		||||
 | 
			
		||||
# The time in seconds after which the bones of a dead player can be looted by
 | 
			
		||||
# everyone.
 | 
			
		||||
# 0 to disable.
 | 
			
		||||
share_bones_time = 1200
 | 
			
		||||
 | 
			
		||||
# How much earlier the bones of a dead player can be looted by
 | 
			
		||||
# everyone if the player dies in a protected area they don't own.
 | 
			
		||||
# 0 to disable. By default it is "share_bones_time" divide by four.
 | 
			
		||||
share_bones_time_early = 300
 | 
			
		||||
 | 
			
		||||
# Inform player of condition and location of new bones.
 | 
			
		||||
bones_position_message = true
 | 
			
		||||
 | 
			
		||||
# Whether fire should be enabled. If disabled, 'basic_flame' nodes will
 | 
			
		||||
# disappear.
 | 
			
		||||
# 'permanent_flame' nodes will remain with either setting.
 | 
			
		||||
enable_fire = false
 | 
			
		||||
 | 
			
		||||
# Enable flame sound.
 | 
			
		||||
flame_sound = true
 | 
			
		||||
 | 
			
		||||
# Whether lavacooling should be enabled.
 | 
			
		||||
enable_lavacooling = true
 | 
			
		||||
 | 
			
		||||
# Whether the stuff in initial_stuff should be given to new players.
 | 
			
		||||
give_initial_stuff = true
 | 
			
		||||
initial_stuff = default:axe_wood,default:torch 9,default:sapling 2,default:apple 5
 | 
			
		||||
 | 
			
		||||
# Whether the TNT mod should be enabled.
 | 
			
		||||
enable_tnt = true
 | 
			
		||||
 | 
			
		||||
# The radius of a TNT explosion.
 | 
			
		||||
tnt_radius = 3
 | 
			
		||||
 | 
			
		||||
# Enable the stairs mod ABM that replaces the old 'upside down'
 | 
			
		||||
# stair and slab nodes in old maps with the new param2 versions.
 | 
			
		||||
enable_stairs_replace_abm = false
 | 
			
		||||
 | 
			
		||||
# Whether to allow respawning in beds.
 | 
			
		||||
# Default value is true.
 | 
			
		||||
enable_bed_respawn = true
 | 
			
		||||
 | 
			
		||||
# Whether players can skip night by sleeping.
 | 
			
		||||
# Default value is true.
 | 
			
		||||
enable_bed_night_skip = true
 | 
			
		||||
 | 
			
		||||
# If enabled, fences and walls cannot be jumped over.
 | 
			
		||||
enable_fence_tall = true
 | 
			
		||||
 | 
			
		||||
# Whether the engine's spawn search, which does not check for a suitable
 | 
			
		||||
# starting biome, is used.
 | 
			
		||||
# Default value is false.
 | 
			
		||||
engine_spawn = false
 | 
			
		||||
 | 
			
		||||
# Whether river water source nodes create flowing sounds.
 | 
			
		||||
# Helps rivers create more sound, especially on level sections.
 | 
			
		||||
river_source_sounds = true
 | 
			
		||||
 | 
			
		||||
# Enable cloud variation by the 'weather' mod.
 | 
			
		||||
# Non-functional in V6 or Singlenode mapgens.
 | 
			
		||||
enable_weather = true
 | 
			
		||||
 
 | 
			
		||||
@@ -72,6 +72,9 @@ default:torch 99,default:cobble 99
 | 
			
		||||
# Helps rivers create more sound, especially on level sections.
 | 
			
		||||
#river_source_sounds = false
 | 
			
		||||
 | 
			
		||||
# Enable cloud variation by the 'weather' mod.
 | 
			
		||||
# Enable cloud and shadow intensity variation by the 'weather' mod.
 | 
			
		||||
# Non-functional in V6 or Singlenode mapgens.
 | 
			
		||||
#enable_weather = true
 | 
			
		||||
 | 
			
		||||
# If enabled, non-player actions are logged
 | 
			
		||||
#log_non_player_actions = false
 | 
			
		||||
 
 | 
			
		||||
@@ -31,6 +31,7 @@ function beds.register_bed(name, def)
 | 
			
		||||
		wield_image = def.wield_image,
 | 
			
		||||
		drawtype = "nodebox",
 | 
			
		||||
		tiles = def.tiles.bottom,
 | 
			
		||||
		use_texture_alpha = "clip",
 | 
			
		||||
		paramtype = "light",
 | 
			
		||||
		paramtype2 = "facedir",
 | 
			
		||||
		is_ground_content = false,
 | 
			
		||||
@@ -95,8 +96,7 @@ function beds.register_bed(name, def)
 | 
			
		||||
			minetest.set_node(pos, {name = name .. "_bottom", param2 = dir})
 | 
			
		||||
			minetest.set_node(botpos, {name = name .. "_top", param2 = dir})
 | 
			
		||||
 | 
			
		||||
			if not (creative and creative.is_enabled_for
 | 
			
		||||
					and creative.is_enabled_for(player_name)) then
 | 
			
		||||
			if not minetest.is_creative_enabled(player_name) then
 | 
			
		||||
				itemstack:take_item()
 | 
			
		||||
			end
 | 
			
		||||
			return itemstack
 | 
			
		||||
@@ -151,11 +151,13 @@ function beds.register_bed(name, def)
 | 
			
		||||
	minetest.register_node(name .. "_top", {
 | 
			
		||||
		drawtype = "nodebox",
 | 
			
		||||
		tiles = def.tiles.top,
 | 
			
		||||
		use_texture_alpha = "clip",
 | 
			
		||||
		paramtype = "light",
 | 
			
		||||
		paramtype2 = "facedir",
 | 
			
		||||
		is_ground_content = false,
 | 
			
		||||
		pointable = false,
 | 
			
		||||
		groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, bed = 2},
 | 
			
		||||
		groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, bed = 2,
 | 
			
		||||
				not_in_creative_inventory = 1},
 | 
			
		||||
		sounds = def.sounds or default.node_sound_wood_defaults(),
 | 
			
		||||
		drop = name .. "_bottom",
 | 
			
		||||
		node_box = {
 | 
			
		||||
 
 | 
			
		||||
@@ -60,33 +60,62 @@ local function lay_down(player, pos, bed_pos, state, skip)
 | 
			
		||||
 | 
			
		||||
	-- stand up
 | 
			
		||||
	if state ~= nil and not state then
 | 
			
		||||
		local p = beds.pos[name] or nil
 | 
			
		||||
		beds.player[name] = nil
 | 
			
		||||
		if not beds.player[name] then
 | 
			
		||||
			-- player not in bed, do nothing
 | 
			
		||||
			return false
 | 
			
		||||
		end
 | 
			
		||||
		beds.bed_position[name] = nil
 | 
			
		||||
		-- skip here to prevent sending player specific changes (used for leaving players)
 | 
			
		||||
		if skip then
 | 
			
		||||
			return
 | 
			
		||||
		end
 | 
			
		||||
		if p then
 | 
			
		||||
			player:set_pos(p)
 | 
			
		||||
		end
 | 
			
		||||
		player:set_pos(beds.pos[name])
 | 
			
		||||
 | 
			
		||||
		-- physics, eye_offset, etc
 | 
			
		||||
		local physics_override = beds.player[name].physics_override
 | 
			
		||||
		beds.player[name] = nil
 | 
			
		||||
		player:set_physics_override({
 | 
			
		||||
			speed = physics_override.speed,
 | 
			
		||||
			jump = physics_override.jump,
 | 
			
		||||
			gravity = physics_override.gravity
 | 
			
		||||
		})
 | 
			
		||||
		player:set_eye_offset({x = 0, y = 0, z = 0}, {x = 0, y = 0, z = 0})
 | 
			
		||||
		player:set_look_horizontal(math.random(1, 180) / 100)
 | 
			
		||||
		player_api.player_attached[name] = false
 | 
			
		||||
		player:set_physics_override(1, 1, 1)
 | 
			
		||||
		hud_flags.wielditem = true
 | 
			
		||||
		player_api.set_animation(player, "stand" , 30)
 | 
			
		||||
 | 
			
		||||
	-- lay down
 | 
			
		||||
	else
 | 
			
		||||
 | 
			
		||||
		-- Check if bed is occupied
 | 
			
		||||
		for _, other_pos in pairs(beds.bed_position) do
 | 
			
		||||
			if vector.distance(bed_pos, other_pos) < 0.1 then
 | 
			
		||||
				minetest.chat_send_player(name, S("This bed is already occupied!"))
 | 
			
		||||
				return false
 | 
			
		||||
			end
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
		-- Check if player is moving
 | 
			
		||||
		if vector.length(player:get_velocity()) > 0.001 then
 | 
			
		||||
			minetest.chat_send_player(name, S("You have to stop moving before going to bed!"))
 | 
			
		||||
			return false
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
		-- Check if player is attached to an object
 | 
			
		||||
		if player:get_attach() then
 | 
			
		||||
			return false
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
		if beds.player[name] then
 | 
			
		||||
			-- player already in bed, do nothing
 | 
			
		||||
			return false
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
		beds.pos[name] = pos
 | 
			
		||||
		beds.bed_position[name] = bed_pos
 | 
			
		||||
		beds.player[name] = 1
 | 
			
		||||
		beds.player[name] = {physics_override = player:get_physics_override()}
 | 
			
		||||
 | 
			
		||||
		-- physics, eye_offset, etc
 | 
			
		||||
		player:set_eye_offset({x = 0, y = -13, z = 0}, {x = 0, y = 0, z = 0})
 | 
			
		||||
		local yaw, param2 = get_look_yaw(bed_pos)
 | 
			
		||||
		player:set_look_horizontal(yaw)
 | 
			
		||||
		local dir = minetest.facedir_to_dir(param2)
 | 
			
		||||
@@ -97,7 +126,7 @@ local function lay_down(player, pos, bed_pos, state, skip)
 | 
			
		||||
			y = bed_pos.y + 0.07,
 | 
			
		||||
			z = bed_pos.z + dir.z / 2
 | 
			
		||||
		}
 | 
			
		||||
		player:set_physics_override(0, 0, 0)
 | 
			
		||||
		player:set_physics_override({speed = 0, jump = 0, gravity = 0})
 | 
			
		||||
		player:set_pos(p)
 | 
			
		||||
		player_api.player_attached[name] = true
 | 
			
		||||
		hud_flags.wielditem = false
 | 
			
		||||
@@ -230,6 +259,19 @@ minetest.register_on_leaveplayer(function(player)
 | 
			
		||||
	end
 | 
			
		||||
end)
 | 
			
		||||
 | 
			
		||||
minetest.register_on_dieplayer(function(player)
 | 
			
		||||
	local name = player:get_player_name()
 | 
			
		||||
	local in_bed = beds.player
 | 
			
		||||
	local pos = player:get_pos()
 | 
			
		||||
	local yaw = get_look_yaw(pos)
 | 
			
		||||
 | 
			
		||||
	if in_bed[name] then
 | 
			
		||||
		lay_down(player, nil, pos, false)
 | 
			
		||||
		player:set_look_horizontal(yaw)
 | 
			
		||||
		player:set_pos(pos)
 | 
			
		||||
	end
 | 
			
		||||
end)
 | 
			
		||||
 | 
			
		||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
 | 
			
		||||
	if formname ~= "beds_form" then
 | 
			
		||||
		return
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,10 @@
 | 
			
		||||
# textdomain: beds
 | 
			
		||||
Fancy Bed=Schickes Bett
 | 
			
		||||
Simple Bed=Schlichtes Bett
 | 
			
		||||
Leave Bed=Bett verlassen
 | 
			
		||||
This bed is already occupied!=Dieses Bett ist bereits belegt!
 | 
			
		||||
You have to stop moving before going to bed!=Sie müssen stehen bleiben, bevor Sie zu Bett gehen können!
 | 
			
		||||
Good morning.=Guten Morgen.
 | 
			
		||||
@1 of @2 players are in bed=@1 von @2 Spielern sind im Bett
 | 
			
		||||
Force night skip=Überspringen der Nacht erzwingen
 | 
			
		||||
You can only sleep at night.=Sie können nur nachts schlafen.
 | 
			
		||||
Leave Bed=Bett verlassen
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								mods/beds/locale/beds.eo.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,10 @@
 | 
			
		||||
# textdomain: beds
 | 
			
		||||
Fancy Bed=Luksa Lito
 | 
			
		||||
Simple Bed=Simpla Lito
 | 
			
		||||
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!
 | 
			
		||||
Good morning.=Bonan matenon.
 | 
			
		||||
@1 of @2 players are in bed=@1 el @2 ludantoj estas en lito
 | 
			
		||||
Force night skip=Devigi noktan salton
 | 
			
		||||
You can only sleep at night.=Vi povas dormi nur nokte. 
 | 
			
		||||
Leave Bed=Ellitiĝi
 | 
			
		||||
@@ -1,8 +1,10 @@
 | 
			
		||||
# textdomain: beds
 | 
			
		||||
Fancy Bed=Cama de lujo
 | 
			
		||||
Simple Bed=Cama sencilla
 | 
			
		||||
Leave Bed=Abandonar cama
 | 
			
		||||
This bed is already occupied!=Esta cama esta ocupada
 | 
			
		||||
You have to stop moving before going to bed!=Deja de moverte o no podras acostarte
 | 
			
		||||
Good morning.=Buenos días.
 | 
			
		||||
@1 of @2 players are in bed=@1 de @2 jugadores están en cama
 | 
			
		||||
Force night skip=Forzar evitar noche
 | 
			
		||||
@1 of @2 players are in bed=@1 de @2 jugadores están durmiendo
 | 
			
		||||
Force night skip=Forzar hacer de dia
 | 
			
		||||
You can only sleep at night.=Sólo puedes dormir por la noche.
 | 
			
		||||
Leave Bed=Levantarse 
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,10 @@
 | 
			
		||||
# textdomain: beds
 | 
			
		||||
Fancy Bed=Lit chic
 | 
			
		||||
Simple Bed=Lit simple
 | 
			
		||||
Leave Bed=Se lever du lit
 | 
			
		||||
This bed is already occupied!=Ce lit est déjà occupé !
 | 
			
		||||
You have to stop moving before going to bed!=Vous devez arrêter de bouger avant de vous coucher !
 | 
			
		||||
Good morning.=Bonjour.
 | 
			
		||||
@1 of @2 players are in bed=@1 joueur(s) sur @2 sont au lit
 | 
			
		||||
Force night skip=Forcer le passage de la nuit
 | 
			
		||||
You can only sleep at night.=Vous ne pouvez dormir que la nuit.
 | 
			
		||||
Leave Bed=Se lever du lit
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,10 @@
 | 
			
		||||
# textdomain: beds
 | 
			
		||||
Leave Bed=Tinggalkan Dipan
 | 
			
		||||
Fancy Bed=Ranjang Mewah
 | 
			
		||||
Simple Bed=Ranjang Sederhana
 | 
			
		||||
This bed is already occupied!=
 | 
			
		||||
You have to stop moving before going to bed!=
 | 
			
		||||
Good morning.=Selamat pagi.
 | 
			
		||||
@1 of @2 players are in bed=@1 dari @2 pemain sedang tidur
 | 
			
		||||
Force night skip=Paksa lewati malam
 | 
			
		||||
You can only sleep at night.=Anda hanya boleh tidur pada waktu malam.
 | 
			
		||||
Fancy Bed=Dipan Mewah
 | 
			
		||||
Simple Bed=Dipan Sederhana
 | 
			
		||||
You can only sleep at night.=Anda hanya dapat tidur pada waktu malam.
 | 
			
		||||
Leave Bed=Tinggalkan Ranjang
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,10 @@
 | 
			
		||||
# textdomain: beds
 | 
			
		||||
Fancy Bed=Letto decorato
 | 
			
		||||
Simple Bed=Letto semplice
 | 
			
		||||
This bed is already occupied!=
 | 
			
		||||
You have to stop moving before going to bed!=
 | 
			
		||||
Good morning.=
 | 
			
		||||
@1 of @2 players are in bed=
 | 
			
		||||
Force night skip=
 | 
			
		||||
You can only sleep at night.=
 | 
			
		||||
Leave Bed=Alzati dal letto
 | 
			
		||||
							
								
								
									
										10
									
								
								mods/beds/locale/beds.ja.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,10 @@
 | 
			
		||||
# textdomain: beds
 | 
			
		||||
Fancy Bed=ファンシーなベッド
 | 
			
		||||
Simple Bed=シンプルなベッド
 | 
			
		||||
This bed is already occupied!=ベッドはすでに使われています!
 | 
			
		||||
You have to stop moving before going to bed!=寝るときは動かないでください!
 | 
			
		||||
Good morning.=おはようございます。
 | 
			
		||||
@1 of @2 players are in bed=ベッドに@1 / @2人います
 | 
			
		||||
Force night skip=強制的に夜をスキップします
 | 
			
		||||
You can only sleep at night.=夜しか寝れません。
 | 
			
		||||
Leave Bed=ベッドから出ます
 | 
			
		||||
							
								
								
									
										10
									
								
								mods/beds/locale/beds.jbo.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,10 @@
 | 
			
		||||
# textdomain: beds
 | 
			
		||||
Fancy Bed=lo selja'i ckana
 | 
			
		||||
Simple Bed=lo sampu ckana
 | 
			
		||||
This bed is already occupied!=.i lo ti ckana cu canlu
 | 
			
		||||
You have to stop moving before going to bed!=lo nu do cando cu sarcu lo nu do sipna
 | 
			
		||||
Good morning.=.i .uise'inai cerni
 | 
			
		||||
@1 of @2 players are in bed=.i @1 cmima be lu'i @2 le pilno cu vreta lo ckana
 | 
			
		||||
Force night skip=bapli le nu co'u nicte
 | 
			
		||||
You can only sleep at night.=.i steci le ka nicte kei fa le ka do kakne le ka sipna ca pa ckaji be ce'u
 | 
			
		||||
Leave Bed=cliva lo ckana
 | 
			
		||||
@@ -1,8 +1,10 @@
 | 
			
		||||
# textdomain: beds
 | 
			
		||||
Fancy Bed=Katil Beragam
 | 
			
		||||
Simple Bed=Katil Biasa
 | 
			
		||||
Leave Bed=Bangun
 | 
			
		||||
This bed is already occupied!=
 | 
			
		||||
You have to stop moving before going to bed!=
 | 
			
		||||
Good morning.=Selamat pagi.
 | 
			
		||||
@1 of @2 players are in bed=@1 daripada @2 pemain sedang tidur
 | 
			
		||||
Force night skip=Paksa langkau malam
 | 
			
		||||
You can only sleep at night.=Anda hanya boleh tidur pada waktu malam.
 | 
			
		||||
Leave Bed=Bangun
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								mods/beds/locale/beds.pl.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,10 @@
 | 
			
		||||
# textdomain: beds
 | 
			
		||||
Fancy Bed=Fantazyjne łóżko
 | 
			
		||||
Simple Bed=Proste łóżko
 | 
			
		||||
This bed is already occupied!=To łóżko jest już zajęte!
 | 
			
		||||
You have to stop moving before going to bed!=Musisz się zatrzymać aby wejść do łóżka
 | 
			
		||||
Good morning.=Dzień dobry.
 | 
			
		||||
@1 of @2 players are in bed=@1 z @2 graczy śpią
 | 
			
		||||
Force night skip=Wymuś pominięcie nocy
 | 
			
		||||
You can only sleep at night.=Możesz spać tylko w nocy.
 | 
			
		||||
Leave Bed=Opuść łóżko
 | 
			
		||||
							
								
								
									
										10
									
								
								mods/beds/locale/beds.pt_BR.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,10 @@
 | 
			
		||||
# textdomain: beds
 | 
			
		||||
Fancy Bed=Cama Bonita
 | 
			
		||||
Simple Bed=Cama Simples
 | 
			
		||||
This bed is already occupied!=Esta cama já está ocupada!
 | 
			
		||||
You have to stop moving before going to bed!=Você precisa parar de se mover antes de ir para cama!
 | 
			
		||||
Good morning.=Bom dia.
 | 
			
		||||
@1 of @2 players are in bed=@1 de @2 jogadores estão na cama
 | 
			
		||||
Force night skip=Forçar o amanhecer
 | 
			
		||||
You can only sleep at night.=Você só pode dormir à noite
 | 
			
		||||
Leave Bed=Sair da Cama
 | 
			
		||||
@@ -1,8 +1,10 @@
 | 
			
		||||
# textdomain: beds
 | 
			
		||||
Fancy Bed=Детализированная Кровать
 | 
			
		||||
Simple Bed=Обычная Кровать
 | 
			
		||||
Leave Bed=Встать с кровати
 | 
			
		||||
This bed is already occupied!=Эта кровать уже занята!
 | 
			
		||||
You have to stop moving before going to bed!=Нельзя воспользоваться кроватью на ходу!
 | 
			
		||||
Good morning.=Доброе утро.
 | 
			
		||||
@1 of @2 players are in bed=@1 из @2 игроков в кровати
 | 
			
		||||
Force night skip=Пропустить ночь
 | 
			
		||||
You can only sleep at night.=Вы можете спать только ночью.
 | 
			
		||||
Leave Bed=Встать с кровати
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +0,0 @@
 | 
			
		||||
# textdomain: beds
 | 
			
		||||
Fancy Bed=Fin säng
 | 
			
		||||
Simple Bed=Enkel Säng
 | 
			
		||||
Leave Bed=Lämna Säng
 | 
			
		||||
Good morning.= God morgon.
 | 
			
		||||
@1 of @2 players are in bed=@1 av @2 spelar försöker sover.
 | 
			
		||||
Force night skip=Tvinga över natten
 | 
			
		||||
You can only sleep at night.=Du kan bara sova på natten.
 | 
			
		||||
							
								
								
									
										10
									
								
								mods/beds/locale/beds.sk.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,10 @@
 | 
			
		||||
# textdomain: beds
 | 
			
		||||
Fancy Bed=Pekná posteľ
 | 
			
		||||
Simple Bed=Jednoduchá posteľ
 | 
			
		||||
This bed is already occupied!=Táto posteľ je už obsadená
 | 
			
		||||
You have to stop moving before going to bed!=Predtým ako si ľahneš do postele, sa musíš prestať pohybovať!
 | 
			
		||||
Good morning.=Dobré ráno.
 | 
			
		||||
@1 of @2 players are in bed=@1 z @2 hráčov sú v posteli
 | 
			
		||||
Force night skip=Nútene preskočiť noc
 | 
			
		||||
You can only sleep at night.=Môžeš spať len v noci.
 | 
			
		||||
Leave Bed=Opusti posteľ
 | 
			
		||||
							
								
								
									
										10
									
								
								mods/beds/locale/beds.sv.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,10 @@
 | 
			
		||||
# textdomain: beds
 | 
			
		||||
Fancy Bed=Fin säng
 | 
			
		||||
Simple Bed=Enkel säng
 | 
			
		||||
This bed is already occupied!=Den här sängen används redan!
 | 
			
		||||
You have to stop moving before going to bed!=Du måste stanna innan du kan lägga dig!
 | 
			
		||||
Good morning.=God morgon.
 | 
			
		||||
@1 of @2 players are in bed=@1 av @2 spelare försöker sova.
 | 
			
		||||
Force night skip=Tvinga att hoppa över natt
 | 
			
		||||
You can only sleep at night.=Du kan bara sova på natten.
 | 
			
		||||
Leave Bed=Lämna säng
 | 
			
		||||
							
								
								
									
										10
									
								
								mods/beds/locale/beds.uk.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,10 @@
 | 
			
		||||
# textdomain: beds
 | 
			
		||||
Fancy Bed=Деталізована Постіль
 | 
			
		||||
Simple Bed=Звичайна Постіль
 | 
			
		||||
This bed is already occupied!=Ця постіль вже зайнята!
 | 
			
		||||
You have to stop moving before going to bed!=Не можна скористатись постіллю на ходу!
 | 
			
		||||
Good morning.=Доброго ранку.
 | 
			
		||||
@1 of @2 players are in bed=@1 з @2 гравців в ліжку
 | 
			
		||||
Force night skip=Пропустити ніч
 | 
			
		||||
You can only sleep at night.=Ви можете спати тільки вночі.
 | 
			
		||||
Leave Bed=Встати з ліжка
 | 
			
		||||
@@ -1,8 +1,10 @@
 | 
			
		||||
# textdomain: beds
 | 
			
		||||
Fancy Bed=花式床
 | 
			
		||||
Simple Bed=简易床
 | 
			
		||||
Leave Bed=离开床
 | 
			
		||||
This bed is already occupied!=床上已有人!
 | 
			
		||||
You have to stop moving before going to bed!=上床前要停止移动!
 | 
			
		||||
Good morning.=早安!
 | 
			
		||||
@1 of @2 players are in bed=@2位玩家中的@1位在床上
 | 
			
		||||
Force night skip=强制跳过夜晚
 | 
			
		||||
You can only sleep at night.=你只能在晚上睡觉。
 | 
			
		||||
Leave Bed=离开床
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +1,10 @@
 | 
			
		||||
# textdomain: beds
 | 
			
		||||
Fancy Bed=花式床
 | 
			
		||||
Simple Bed=簡易床
 | 
			
		||||
Leave Bed=離開床
 | 
			
		||||
This bed is already occupied!=
 | 
			
		||||
You have to stop moving before going to bed!=
 | 
			
		||||
Good morning.=早安!
 | 
			
		||||
@1 of @2 players are in bed=@2位玩家中的@1位在床上
 | 
			
		||||
Force night skip=強制跳過夜晚
 | 
			
		||||
You can only sleep at night.=你只能在晚上睡覺。
 | 
			
		||||
 | 
			
		||||
Leave Bed=離開床
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,10 @@
 | 
			
		||||
# textdomain: beds
 | 
			
		||||
Leave Bed=
 | 
			
		||||
Fancy Bed=
 | 
			
		||||
Simple Bed=
 | 
			
		||||
This bed is already occupied!=
 | 
			
		||||
You have to stop moving before going to bed!=
 | 
			
		||||
Good morning.=
 | 
			
		||||
@1 of @2 players are in bed=
 | 
			
		||||
Force night skip=
 | 
			
		||||
You can only sleep at night.=
 | 
			
		||||
Fancy Bed=
 | 
			
		||||
Simple Bed=
 | 
			
		||||
Leave Bed=
 | 
			
		||||
 
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 540 B After Width: | Height: | Size: 490 B  | 
| 
		 Before Width: | Height: | Size: 537 B After Width: | Height: | Size: 486 B  | 
| 
		 Before Width: | Height: | Size: 390 B After Width: | Height: | Size: 340 B  | 
| 
		 Before Width: | Height: | Size: 387 B After Width: | Height: | Size: 343 B  | 
| 
		 Before Width: | Height: | Size: 296 B After Width: | Height: | Size: 248 B  | 
| 
		 Before Width: | Height: | Size: 316 B After Width: | Height: | Size: 265 B  | 
| 
		 Before Width: | Height: | Size: 561 B After Width: | Height: | Size: 431 B  | 
| 
		 Before Width: | Height: | Size: 537 B After Width: | Height: | Size: 427 B  | 
| 
		 Before Width: | Height: | Size: 611 B After Width: | Height: | Size: 464 B  | 
| 
		 Before Width: | Height: | Size: 596 B After Width: | Height: | Size: 446 B  | 
| 
		 Before Width: | Height: | Size: 583 B After Width: | Height: | Size: 474 B  | 
| 
		 Before Width: | Height: | Size: 616 B After Width: | Height: | Size: 547 B  | 
| 
		 Before Width: | Height: | Size: 495 B After Width: | Height: | Size: 425 B  | 
| 
		 Before Width: | Height: | Size: 556 B After Width: | Height: | Size: 490 B  | 
| 
		 Before Width: | Height: | Size: 304 B After Width: | Height: | Size: 251 B  | 
| 
		 Before Width: | Height: | Size: 143 B After Width: | Height: | Size: 83 B  | 
@@ -8,25 +8,16 @@ binoculars = {}
 | 
			
		||||
local S = minetest.get_translator("binoculars")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- Detect creative mod
 | 
			
		||||
local creative_mod = minetest.get_modpath("creative")
 | 
			
		||||
-- Cache creative mode setting as fallback if creative mod not present
 | 
			
		||||
local creative_mode_cache = minetest.settings:get_bool("creative_mode")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- Update player property
 | 
			
		||||
-- Global to allow overriding
 | 
			
		||||
 | 
			
		||||
function binoculars.update_player_property(player)
 | 
			
		||||
	local creative_enabled =
 | 
			
		||||
		(creative_mod and creative.is_enabled_for(player:get_player_name())) or
 | 
			
		||||
		creative_mode_cache
 | 
			
		||||
	local new_zoom_fov = 0
 | 
			
		||||
 | 
			
		||||
	if player:get_inventory():contains_item(
 | 
			
		||||
			"main", "binoculars:binoculars") then
 | 
			
		||||
		new_zoom_fov = 10
 | 
			
		||||
	elseif creative_enabled then
 | 
			
		||||
	elseif minetest.is_creative_enabled(player:get_player_name()) then
 | 
			
		||||
		new_zoom_fov = 15
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
@@ -62,6 +53,7 @@ minetest.register_craftitem("binoculars:binoculars", {
 | 
			
		||||
	description = S("Binoculars") .. "\n" .. S("Use with 'Zoom' key"),
 | 
			
		||||
	inventory_image = "binoculars_binoculars.png",
 | 
			
		||||
	stack_max = 1,
 | 
			
		||||
	groups = {tool = 1},
 | 
			
		||||
 | 
			
		||||
	on_use = function(itemstack, user, pointed_thing)
 | 
			
		||||
		binoculars.update_player_property(user)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3
									
								
								mods/binoculars/locale/binoculars.eo.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,3 @@
 | 
			
		||||
# textdomain: binoculars
 | 
			
		||||
Binoculars=Binoklo
 | 
			
		||||
Use with 'Zoom' key=Uzi per 'Zomo' klavo
 | 
			
		||||
@@ -1,3 +1,3 @@
 | 
			
		||||
# textdomain: binoculars
 | 
			
		||||
Binoculars=Binokular
 | 
			
		||||
Use with 'Zoom' key=Pakai dengan tombol 'Zum'
 | 
			
		||||
Binoculars=Teropong
 | 
			
		||||
Use with 'Zoom' key=Pakai dengan tombol 'Zoom'
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3
									
								
								mods/binoculars/locale/binoculars.ja.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,3 @@
 | 
			
		||||
# textdomain: binoculars
 | 
			
		||||
Binoculars=双眼鏡
 | 
			
		||||
Use with 'Zoom' key=ズームキーで使います
 | 
			
		||||
							
								
								
									
										3
									
								
								mods/binoculars/locale/binoculars.jbo.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,3 @@
 | 
			
		||||
# textdomain: binoculars
 | 
			
		||||
Binoculars=lo reldarvistci
 | 
			
		||||
Use with 'Zoom' key=.i tu'a le jvinu banro batke cu tadji lo nu pilno
 | 
			
		||||
							
								
								
									
										3
									
								
								mods/binoculars/locale/binoculars.pl.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,3 @@
 | 
			
		||||
# textdomain: binoculars
 | 
			
		||||
Binoculars=Lornetka
 | 
			
		||||
Use with 'Zoom' key=Aby użyć naciśnij 'Zoom'
 | 
			
		||||
							
								
								
									
										3
									
								
								mods/binoculars/locale/binoculars.pt_BR.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,3 @@
 | 
			
		||||
# textdomain: binoculars
 | 
			
		||||
Binoculars=Binóculos
 | 
			
		||||
Use with 'Zoom' key=Use com a tecla de 'Zoom'
 | 
			
		||||
@@ -1,3 +0,0 @@
 | 
			
		||||
# textdomain: binoculars
 | 
			
		||||
Binoculars=Kikare
 | 
			
		||||
Use with 'Zoom' key=Används med 'Zoom' knappen
 | 
			
		||||
							
								
								
									
										3
									
								
								mods/binoculars/locale/binoculars.sk.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,3 @@
 | 
			
		||||
# textdomain: binoculars
 | 
			
		||||
Binoculars=Ďalekohľad
 | 
			
		||||
Use with 'Zoom' key=Použi s klávesou "Priblíž"
 | 
			
		||||
							
								
								
									
										3
									
								
								mods/binoculars/locale/binoculars.sv.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,3 @@
 | 
			
		||||
# textdomain: binoculars
 | 
			
		||||
Binoculars=Kikare
 | 
			
		||||
Use with 'Zoom' key=Använd med 'Zoom'-knappen
 | 
			
		||||
							
								
								
									
										3
									
								
								mods/binoculars/locale/binoculars.uk.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,3 @@
 | 
			
		||||
# textdomain: binoculars
 | 
			
		||||
Binoculars=Бінокль
 | 
			
		||||
Use with 'Zoom' key=Використовується з правами 'Zoom'
 | 
			
		||||
@@ -1,4 +1,3 @@
 | 
			
		||||
name = binoculars
 | 
			
		||||
description = Minetest Game mod: binoculars
 | 
			
		||||
depends = default
 | 
			
		||||
optional_depends = creative
 | 
			
		||||
 
 | 
			
		||||
@@ -53,10 +53,9 @@ function boat.on_rightclick(self, clicker)
 | 
			
		||||
	end
 | 
			
		||||
	local name = clicker:get_player_name()
 | 
			
		||||
	if self.driver and name == self.driver then
 | 
			
		||||
		self.driver = nil
 | 
			
		||||
		self.auto = false
 | 
			
		||||
		-- Cleanup happens in boat.on_detach_child
 | 
			
		||||
		clicker:set_detach()
 | 
			
		||||
		player_api.player_attached[name] = false
 | 
			
		||||
 | 
			
		||||
		player_api.set_animation(clicker, "stand", 30)
 | 
			
		||||
		local pos = clicker:get_pos()
 | 
			
		||||
		pos = {x = pos.x, y = pos.y + 0.2, z = pos.z}
 | 
			
		||||
@@ -64,18 +63,12 @@ function boat.on_rightclick(self, clicker)
 | 
			
		||||
			clicker:set_pos(pos)
 | 
			
		||||
		end)
 | 
			
		||||
	elseif not self.driver then
 | 
			
		||||
		local attach = clicker:get_attach()
 | 
			
		||||
		if attach and attach:get_luaentity() then
 | 
			
		||||
			local luaentity = attach:get_luaentity()
 | 
			
		||||
			if luaentity.driver then
 | 
			
		||||
				luaentity.driver = nil
 | 
			
		||||
			end
 | 
			
		||||
			clicker:set_detach()
 | 
			
		||||
		end
 | 
			
		||||
		self.driver = name
 | 
			
		||||
		clicker:set_attach(self.object, "",
 | 
			
		||||
			{x = 0.5, y = 1, z = -3}, {x = 0, y = 0, z = 0})
 | 
			
		||||
 | 
			
		||||
		self.driver = name
 | 
			
		||||
		player_api.player_attached[name] = true
 | 
			
		||||
 | 
			
		||||
		minetest.after(0.2, function()
 | 
			
		||||
			player_api.set_animation(clicker, "sit", 30)
 | 
			
		||||
		end)
 | 
			
		||||
@@ -86,9 +79,13 @@ end
 | 
			
		||||
 | 
			
		||||
-- If driver leaves server while driving boat
 | 
			
		||||
function boat.on_detach_child(self, child)
 | 
			
		||||
	if child and child:get_player_name() == self.driver then
 | 
			
		||||
		player_api.player_attached[child:get_player_name()] = false
 | 
			
		||||
 | 
			
		||||
		self.driver = nil
 | 
			
		||||
		self.auto = false
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function boat.on_activate(self, staticdata, dtime_s)
 | 
			
		||||
@@ -119,8 +116,7 @@ function boat.on_punch(self, puncher)
 | 
			
		||||
	if not self.driver then
 | 
			
		||||
		self.removed = true
 | 
			
		||||
		local inv = puncher:get_inventory()
 | 
			
		||||
		if not (creative and creative.is_enabled_for
 | 
			
		||||
				and creative.is_enabled_for(name))
 | 
			
		||||
		if not minetest.is_creative_enabled(name)
 | 
			
		||||
				or not inv:contains_item("main", "boats:boat") then
 | 
			
		||||
			local leftover = inv:add_item("main", "boats:boat")
 | 
			
		||||
			-- if no room in inventory add a replacement boat to the world
 | 
			
		||||
@@ -172,7 +168,8 @@ function boat.on_step(self, dtime)
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
	local velo = self.object:get_velocity()
 | 
			
		||||
	if self.v == 0 and velo.x == 0 and velo.y == 0 and velo.z == 0 then
 | 
			
		||||
	if not self.driver and
 | 
			
		||||
			self.v == 0 and velo.x == 0 and velo.y == 0 and velo.z == 0 then
 | 
			
		||||
		self.object:set_pos(self.object:get_pos())
 | 
			
		||||
		return
 | 
			
		||||
	end
 | 
			
		||||
@@ -268,8 +265,7 @@ minetest.register_craftitem("boats:boat", {
 | 
			
		||||
				boat:set_yaw(placer:get_look_horizontal())
 | 
			
		||||
			end
 | 
			
		||||
			local player_name = placer and placer:get_player_name() or ""
 | 
			
		||||
			if not (creative and creative.is_enabled_for and
 | 
			
		||||
					creative.is_enabled_for(player_name)) then
 | 
			
		||||
			if not minetest.is_creative_enabled(player_name) then
 | 
			
		||||
				itemstack:take_item()
 | 
			
		||||
			end
 | 
			
		||||
		end
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								mods/boats/locale/boats.eo.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,4 @@
 | 
			
		||||
# textdomain: boats
 | 
			
		||||
Boat cruise mode on=La kroza maniero de la boato estas ŝaltita.
 | 
			
		||||
Boat cruise mode off=La kroza maniero de la boato estas malŝaltita.
 | 
			
		||||
Boat=Boato
 | 
			
		||||
							
								
								
									
										4
									
								
								mods/boats/locale/boats.ja.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,4 @@
 | 
			
		||||
# textdomain: boats
 | 
			
		||||
Boat cruise mode on=クルージングモード・オン
 | 
			
		||||
Boat cruise mode off=クルージングモード・オフ
 | 
			
		||||
Boat=ボート
 | 
			
		||||
							
								
								
									
										4
									
								
								mods/boats/locale/boats.jbo.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,4 @@
 | 
			
		||||
# textdomain: boats
 | 
			
		||||
Boat cruise mode on=.i lo bloti cu zmiku le ka klama
 | 
			
		||||
Boat cruise mode off=.i lo bloti cu macnu le ka klama
 | 
			
		||||
Boat=lo bloti
 | 
			
		||||
							
								
								
									
										4
									
								
								mods/boats/locale/boats.pl.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,4 @@
 | 
			
		||||
# textdomain: boats
 | 
			
		||||
Boat cruise mode on=Tryb rejsu łodką włączony
 | 
			
		||||
Boat cruise mode off=Tryb rejsu łodką wyłączony
 | 
			
		||||
Boat=Łódka
 | 
			
		||||
							
								
								
									
										4
									
								
								mods/boats/locale/boats.pt_BR.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,4 @@
 | 
			
		||||
# textdomain: boats
 | 
			
		||||
Boat cruise mode on=Modo de cruseiro do barco ligado
 | 
			
		||||
Boat cruise mode off=Modo de cruseiro do barco desligado
 | 
			
		||||
Boat=Barco
 | 
			
		||||
							
								
								
									
										4
									
								
								mods/boats/locale/boats.sk.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,4 @@
 | 
			
		||||
# textdomain: boats
 | 
			
		||||
Boat cruise mode on=Cestovný režim loďky je zapnutý
 | 
			
		||||
Boat cruise mode off=Cestovný režim loďky je vypnutý
 | 
			
		||||
Boat=Loďka
 | 
			
		||||
							
								
								
									
										4
									
								
								mods/boats/locale/boats.uk.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,4 @@
 | 
			
		||||
# textdomain: boats
 | 
			
		||||
Boat cruise mode on=Режим мандрування на човні увімкнено
 | 
			
		||||
Boat cruise mode off=Режим мандрування на човні вимкнено
 | 
			
		||||
Boat=Човен
 | 
			
		||||
@@ -141,8 +141,18 @@ local function may_replace(pos, player)
 | 
			
		||||
		return false
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	-- allow replacing air and liquids
 | 
			
		||||
	if node_name == "air" or node_definition.liquidtype ~= "none" then
 | 
			
		||||
	-- allow replacing air
 | 
			
		||||
	if node_name == "air" then
 | 
			
		||||
		return true
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	-- don't replace nodes inside protections
 | 
			
		||||
	if minetest.is_protected(pos, player:get_player_name()) then
 | 
			
		||||
		return false
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	-- allow replacing liquids
 | 
			
		||||
	if node_definition.liquidtype ~= "none" then
 | 
			
		||||
		return true
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
@@ -154,8 +164,7 @@ local function may_replace(pos, player)
 | 
			
		||||
 | 
			
		||||
	-- default to each nodes buildable_to; if a placed block would replace it, why shouldn't bones?
 | 
			
		||||
	-- flowers being squished by bones are more realistical than a squished stone, too
 | 
			
		||||
	-- exception are of course any protected buildable_to
 | 
			
		||||
	return node_definition.buildable_to and not minetest.is_protected(pos, player:get_player_name())
 | 
			
		||||
	return node_definition.buildable_to
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local drop = function(pos, itemstack)
 | 
			
		||||
@@ -182,7 +191,6 @@ local function is_all_empty(player_inv)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
minetest.register_on_dieplayer(function(player)
 | 
			
		||||
 | 
			
		||||
	local bones_mode = minetest.settings:get("bones_mode") or "bones"
 | 
			
		||||
	if bones_mode ~= "bones" and bones_mode ~= "drop" and bones_mode ~= "keep" then
 | 
			
		||||
		bones_mode = "bones"
 | 
			
		||||
@@ -194,8 +202,7 @@ minetest.register_on_dieplayer(function(player)
 | 
			
		||||
	local pos_string = minetest.pos_to_string(pos)
 | 
			
		||||
 | 
			
		||||
	-- return if keep inventory set or in creative mode
 | 
			
		||||
	if bones_mode == "keep" or (creative and creative.is_enabled_for
 | 
			
		||||
			and creative.is_enabled_for(player:get_player_name())) then
 | 
			
		||||
	if bones_mode == "keep" or minetest.is_creative_enabled(player_name) then
 | 
			
		||||
		minetest.log("action", player_name .. " dies at " .. pos_string ..
 | 
			
		||||
			". No bones placed")
 | 
			
		||||
		if bones_position_message then
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								mods/bones/locale/bones.eo.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,8 @@
 | 
			
		||||
# textdomain: bones
 | 
			
		||||
Bones=Ostoj
 | 
			
		||||
@1's old bones=La malfreŝaj ostoj de @1
 | 
			
		||||
@1 died at @2.=@1 mortis ĉe @2
 | 
			
		||||
@1 died at @2, and dropped their inventory.=@1 mortis ĉe @2, kaj delasis sian stokon.
 | 
			
		||||
@1 died at @2, and bones were placed.=@1 mortis ĉe @2, kaj ostoj estas demetitaj.
 | 
			
		||||
@1's fresh bones=La freŝaj ostoj de @1
 | 
			
		||||
@1's bones=La ostoj de @1
 | 
			
		||||
							
								
								
									
										8
									
								
								mods/bones/locale/bones.ja.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,8 @@
 | 
			
		||||
# textdomain: bones
 | 
			
		||||
Bones=骨
 | 
			
		||||
@1's old bones=@1の古い骨
 | 
			
		||||
@1 died at @2.=@1は@2で死亡しました。
 | 
			
		||||
@1 died at @2, and dropped their inventory.=@1は@2で死亡して持ち物を落としました。
 | 
			
		||||
@1 died at @2, and bones were placed.=@1は@2で死亡して骨が残されました。
 | 
			
		||||
@1's fresh bones=@1の新鮮な骨
 | 
			
		||||
@1's bones=@1の骨
 | 
			
		||||
							
								
								
									
										8
									
								
								mods/bones/locale/bones.jbo.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,8 @@
 | 
			
		||||
# textdomain: bones
 | 
			
		||||
Bones=lo bongu gunma
 | 
			
		||||
@1's old bones=.i ti tolci'o ke bongu gunma po'a la'o zo'i.@1.zo'i
 | 
			
		||||
@1 died at @2.=.i la'o zo'i.@1.zo'i  pu morsi di'o lo me zoi pos.@2.pos.
 | 
			
		||||
@1 died at @2, and dropped their inventory.=.i la'o zo'i.@1.zo'i goi ly. pu morsi di'o lo me zoi pos.@2.pos. .ije ly. te farlu lo me le dacti liste po ly.
 | 
			
		||||
@1 died at @2, and bones were placed.=.i la'o zo'i.@1.zo'i goi ly. pu morsi di'o lo me zoi pos.@2.pos. .ije lo bongu gunma pu se punji
 | 
			
		||||
@1's fresh bones=.i ti cnino ke bongu gunma po'a la'o zo'i.@1.zo'i
 | 
			
		||||
@1's bones=.i ti bongu gunma po'a la'o zo'i.@1.zo'i
 | 
			
		||||
							
								
								
									
										8
									
								
								mods/bones/locale/bones.pl.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,8 @@
 | 
			
		||||
# textdomain: bones
 | 
			
		||||
Bones=Kości
 | 
			
		||||
@1's old bones=Stare kości @1
 | 
			
		||||
@1 died at @2.=@1 umarł w @2.
 | 
			
		||||
@1 died at @2, and dropped their inventory.=@1 umarł w @2, i upuścił swój ekwipunek.
 | 
			
		||||
@1 died at @2, and bones were placed.=@1 umarł w @2, kości zostały położone.
 | 
			
		||||
@1's fresh bones=Świeże kości @1
 | 
			
		||||
@1's bones=Kości @1
 | 
			
		||||
							
								
								
									
										8
									
								
								mods/bones/locale/bones.pt_BR.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,8 @@
 | 
			
		||||
# textdomain: bones
 | 
			
		||||
Bones=Ossos
 | 
			
		||||
@1's old bones=Ossos antigos de @1
 | 
			
		||||
@1 died at @2.=@1 morreu em @2.
 | 
			
		||||
@1 died at @2, and dropped their inventory.=@1 morreu em @2, e seu inventário foi derrubado.
 | 
			
		||||
@1 died at @2, and bones were placed.=@1 morreu em @2, e os ossos foram colocados.
 | 
			
		||||
@1's fresh bones=Ossos recentes de @1
 | 
			
		||||
@1's bones=Ossos de @1
 | 
			
		||||
							
								
								
									
										8
									
								
								mods/bones/locale/bones.sk.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,8 @@
 | 
			
		||||
# textdomain: bones
 | 
			
		||||
Bones=Kosti
 | 
			
		||||
@1's old bones=Staré kosti hráča @1
 | 
			
		||||
@1 died at @2.=@1 zomrel na pozícií @2.
 | 
			
		||||
@1 died at @2, and dropped their inventory.=@1 zomrel na pozícií @2 a vysypal svoj inventár.
 | 
			
		||||
@1 died at @2, and bones were placed.=@1 zomrel na pozícií @2 a ostali po ňom kosti.
 | 
			
		||||
@1's fresh bones=Čerstvé kosti hráča @1
 | 
			
		||||
@1's bones=Kosti hráča  @1
 | 
			
		||||
							
								
								
									
										8
									
								
								mods/bones/locale/bones.uk.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,8 @@
 | 
			
		||||
# textdomain: bones
 | 
			
		||||
Bones=Кістки
 | 
			
		||||
@1's old bones=старі кістки @1
 | 
			
		||||
@1 died at @2.=@1 помер в @2.
 | 
			
		||||
@1 died at @2, and dropped their inventory.=@1 помер в @2, та загубив вміст свого інвентарю.
 | 
			
		||||
@1 died at @2, and bones were placed.=@1 помер в @2, розміщені кістки.
 | 
			
		||||
@1's fresh bones=нові кістки @1
 | 
			
		||||
@1's bones=кістки @1
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
Bones=骨骸
 | 
			
		||||
@1's old bones=@1的旧骨骸
 | 
			
		||||
@1 died at @2.=@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 dropped their inventory.=@1在@2死亡,丢掉了所有物品。
 | 
			
		||||
@1 died at @2, and bones were placed.=@1在@2死亡,已放置骨骸。
 | 
			
		||||
@1's fresh bones=@1的新鲜骨骸
 | 
			
		||||
@1's bones=@1的骨骸
 | 
			
		||||
 
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 740 B After Width: | Height: | Size: 349 B  | 
| 
		 Before Width: | Height: | Size: 656 B After Width: | Height: | Size: 339 B  | 
| 
		 Before Width: | Height: | Size: 637 B After Width: | Height: | Size: 341 B  | 
| 
		 Before Width: | Height: | Size: 700 B After Width: | Height: | Size: 338 B  | 
| 
		 Before Width: | Height: | Size: 662 B After Width: | Height: | Size: 333 B  | 
							
								
								
									
										5
									
								
								mods/bucket/locale/bucket.eo.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,5 @@
 | 
			
		||||
# textdomain: bucket
 | 
			
		||||
Empty Bucket=Malplena Sitelo
 | 
			
		||||
Water Bucket=Sitelo da Akvo
 | 
			
		||||
River Water Bucket=Sitelo da Rivera Akvo
 | 
			
		||||
Lava Bucket=Sitelo da Lafo
 | 
			
		||||
							
								
								
									
										5
									
								
								mods/bucket/locale/bucket.ja.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,5 @@
 | 
			
		||||
# textdomain: bucket
 | 
			
		||||
Empty Bucket=空のバケツ
 | 
			
		||||
Water Bucket=水入りバケツ
 | 
			
		||||
River Water Bucket=川の水入りバケツ
 | 
			
		||||
Lava Bucket=溶岩入りバケツ
 | 
			
		||||
							
								
								
									
										5
									
								
								mods/bucket/locale/bucket.jbo.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,5 @@
 | 
			
		||||
# textdomain: bucket
 | 
			
		||||
Empty Bucket=lo baktu be no da
 | 
			
		||||
Water Bucket=lo baktu be lo djacu
 | 
			
		||||
River Water Bucket=lo baktu be lo rirxe djacu
 | 
			
		||||
Lava Bucket=lo baktu be lo likro'i
 | 
			
		||||
							
								
								
									
										5
									
								
								mods/bucket/locale/bucket.pl.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,5 @@
 | 
			
		||||
# textdomain: bucket
 | 
			
		||||
Empty Bucket=Puste wiadro
 | 
			
		||||
Water Bucket=Wiadro z wodą
 | 
			
		||||
River Water Bucket=Wiadro z rzeczną wodą
 | 
			
		||||
Lava Bucket=Wiadro z lawą
 | 
			
		||||
							
								
								
									
										5
									
								
								mods/bucket/locale/bucket.pt_BR.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,5 @@
 | 
			
		||||
# textdomain: bucket
 | 
			
		||||
Empty Bucket=Balde Vazio
 | 
			
		||||
Water Bucket=Balde de Água
 | 
			
		||||
River Water Bucket=Balde de Água do Rio
 | 
			
		||||
Lava Bucket=Balde de Lava
 | 
			
		||||
@@ -1,5 +0,0 @@
 | 
			
		||||
# textdomain: bucket
 | 
			
		||||
Empty Bucket=Tom hink
 | 
			
		||||
Water Bucket=Vatten hink
 | 
			
		||||
River Water Bucket=Flodvatten hink
 | 
			
		||||
Lava Bucket=Lava hink
 | 
			
		||||
							
								
								
									
										5
									
								
								mods/bucket/locale/bucket.sk.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,5 @@
 | 
			
		||||
# textdomain: bucket
 | 
			
		||||
Empty Bucket=Prázdne vedro
 | 
			
		||||
Water Bucket=Vedro s vodou
 | 
			
		||||
River Water Bucket=Vedro s vodou z rieky
 | 
			
		||||
Lava Bucket=Vedro s lávou
 | 
			
		||||
							
								
								
									
										5
									
								
								mods/bucket/locale/bucket.sv.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,5 @@
 | 
			
		||||
# textdomain: bucket
 | 
			
		||||
Empty Bucket=Tom hink
 | 
			
		||||
Water Bucket=Vattenhink
 | 
			
		||||
River Water Bucket=Flodvattenshink
 | 
			
		||||
Lava Bucket=Lavahink
 | 
			
		||||
							
								
								
									
										5
									
								
								mods/bucket/locale/bucket.uk.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,5 @@
 | 
			
		||||
# textdomain: bucket
 | 
			
		||||
Empty Bucket=Пусте Відро
 | 
			
		||||
Water Bucket=Відро З Водою
 | 
			
		||||
River Water Bucket=Відро З Річною Водою
 | 
			
		||||
Lava Bucket=Відро З Лавою
 | 
			
		||||
@@ -62,8 +62,8 @@ for i in ipairs (butter_list) do
 | 
			
		||||
 | 
			
		||||
	minetest.register_node("butterflies:hidden_butterfly_"..name, {
 | 
			
		||||
		drawtype = "airlike",
 | 
			
		||||
		inventory_image = "butterflies_butterfly_"..name..".png",
 | 
			
		||||
		wield_image =  "butterflies_butterfly_"..name..".png",
 | 
			
		||||
		inventory_image = "butterflies_butterfly_"..name..".png^default_invisible_node_overlay.png",
 | 
			
		||||
		wield_image =  "butterflies_butterfly_"..name..".png^default_invisible_node_overlay.png",
 | 
			
		||||
		paramtype = "light",
 | 
			
		||||
		sunlight_propagates = true,
 | 
			
		||||
		walkable = false,
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								mods/butterflies/locale/butterflies.eo.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,4 @@
 | 
			
		||||
# textdomain: butterflies
 | 
			
		||||
White Butterfly=Blanka Papilio
 | 
			
		||||
Red Butterfly=Ruĝa Papilio
 | 
			
		||||
Violet Butterfly=Violkolora Papilio
 | 
			
		||||
							
								
								
									
										4
									
								
								mods/butterflies/locale/butterflies.ja.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,4 @@
 | 
			
		||||
# textdomain: butterflies
 | 
			
		||||
White Butterfly=白色の蝶
 | 
			
		||||
Red Butterfly=赤色の蝶
 | 
			
		||||
Violet Butterfly=紫色の蝶
 | 
			
		||||
							
								
								
									
										4
									
								
								mods/butterflies/locale/butterflies.jbo.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,4 @@
 | 
			
		||||
# textdomain: butterflies
 | 
			
		||||
White Butterfly=lo blabi toldi
 | 
			
		||||
Red Butterfly=lo xunre toldi
 | 
			
		||||
Violet Butterfly=lo zirpu toldi
 | 
			
		||||
							
								
								
									
										4
									
								
								mods/butterflies/locale/butterflies.pl.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,4 @@
 | 
			
		||||
# textdomain: butterflies
 | 
			
		||||
White Butterfly=Biały motyl
 | 
			
		||||
Red Butterfly=Czerwony motyl
 | 
			
		||||
Violet Butterfly=Fioletowy motyl
 | 
			
		||||
							
								
								
									
										4
									
								
								mods/butterflies/locale/butterflies.pt_BR.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,4 @@
 | 
			
		||||
# textdomain: butterflies
 | 
			
		||||
White Butterfly=
 | 
			
		||||
Red Butterfly=
 | 
			
		||||
Violet Butterfly=
 | 
			
		||||
							
								
								
									
										4
									
								
								mods/butterflies/locale/butterflies.sk.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,4 @@
 | 
			
		||||
# textdomain: butterflies
 | 
			
		||||
White Butterfly=Biely motýlik
 | 
			
		||||
Red Butterfly=Červený motýlik
 | 
			
		||||
Violet Butterfly=Fialový motýlik
 | 
			
		||||
							
								
								
									
										4
									
								
								mods/butterflies/locale/butterflies.uk.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,4 @@
 | 
			
		||||
# textdomain: butterflies
 | 
			
		||||
White Butterfly=Білий Метелик
 | 
			
		||||
Red Butterfly=Червоний Метелик
 | 
			
		||||
Violet Butterfly=Фіолетовий Метелик
 | 
			
		||||
@@ -29,15 +29,10 @@ function cart_entity:on_rightclick(clicker)
 | 
			
		||||
	end
 | 
			
		||||
	local player_name = clicker:get_player_name()
 | 
			
		||||
	if self.driver and player_name == self.driver then
 | 
			
		||||
		self.driver = nil
 | 
			
		||||
		carts:manage_attachment(clicker, nil)
 | 
			
		||||
	elseif not self.driver then
 | 
			
		||||
		self.driver = player_name
 | 
			
		||||
		carts:manage_attachment(clicker, self.object)
 | 
			
		||||
 | 
			
		||||
		-- player_api does not update the animation
 | 
			
		||||
		-- when the player is attached, reset to default animation
 | 
			
		||||
		player_api.set_animation(clicker, "stand")
 | 
			
		||||
		self.driver = player_name
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
@@ -51,9 +46,7 @@ function cart_entity:on_activate(staticdata, dtime_s)
 | 
			
		||||
		return
 | 
			
		||||
	end
 | 
			
		||||
	self.railtype = data.railtype
 | 
			
		||||
	if data.old_dir then
 | 
			
		||||
		self.old_dir = data.old_dir
 | 
			
		||||
	end
 | 
			
		||||
	self.old_dir = data.old_dir or self.old_dir
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function cart_entity:get_staticdata()
 | 
			
		||||
@@ -66,8 +59,9 @@ end
 | 
			
		||||
-- 0.5.x and later: When the driver leaves
 | 
			
		||||
function cart_entity:on_detach_child(child)
 | 
			
		||||
	if child and child:get_player_name() == self.driver then
 | 
			
		||||
		self.driver = nil
 | 
			
		||||
		-- Clean up eye height
 | 
			
		||||
		carts:manage_attachment(child, nil)
 | 
			
		||||
		self.driver = nil
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
@@ -108,8 +102,7 @@ function cart_entity:on_punch(puncher, time_from_last_punch, tool_capabilities,
 | 
			
		||||
		end
 | 
			
		||||
		-- Pick up cart
 | 
			
		||||
		local inv = puncher:get_inventory()
 | 
			
		||||
		if not (creative and creative.is_enabled_for
 | 
			
		||||
				and creative.is_enabled_for(puncher:get_player_name()))
 | 
			
		||||
		if not minetest.is_creative_enabled(puncher:get_player_name())
 | 
			
		||||
				or not inv:contains_item("main", "carts:cart") then
 | 
			
		||||
			local leftover = inv:add_item("main", "carts:cart")
 | 
			
		||||
			-- If no room in inventory add a replacement cart to the world
 | 
			
		||||
@@ -135,7 +128,8 @@ function cart_entity:on_punch(puncher, time_from_last_punch, tool_capabilities,
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	local punch_interval = 1
 | 
			
		||||
	if tool_capabilities and tool_capabilities.full_punch_interval then
 | 
			
		||||
	-- Faulty tool registrations may cause the interval to be set to 0 !
 | 
			
		||||
	if tool_capabilities and (tool_capabilities.full_punch_interval or 0) > 0 then
 | 
			
		||||
		punch_interval = tool_capabilities.full_punch_interval
 | 
			
		||||
	end
 | 
			
		||||
	time_from_last_punch = math.min(time_from_last_punch or punch_interval, punch_interval)
 | 
			
		||||
@@ -196,11 +190,11 @@ local function rail_on_step(self, dtime)
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	local pos = self.object:get_pos()
 | 
			
		||||
	local cart_dir = carts:velocity_to_dir(vel)
 | 
			
		||||
	local same_dir = vector.equals(cart_dir, self.old_dir)
 | 
			
		||||
	local dir = carts:velocity_to_dir(vel)
 | 
			
		||||
	local dir_changed = not vector.equals(dir, self.old_dir)
 | 
			
		||||
	local update = {}
 | 
			
		||||
 | 
			
		||||
	if self.old_pos and not self.punched and same_dir then
 | 
			
		||||
	if self.old_pos and not self.punched and not dir_changed then
 | 
			
		||||
		local flo_pos = vector.round(pos)
 | 
			
		||||
		local flo_old = vector.round(self.old_pos)
 | 
			
		||||
		if vector.equals(flo_pos, flo_old) then
 | 
			
		||||
@@ -220,7 +214,7 @@ local function rail_on_step(self, dtime)
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	local stop_wiggle = false
 | 
			
		||||
	if self.old_pos and same_dir then
 | 
			
		||||
	if self.old_pos and not dir_changed then
 | 
			
		||||
		-- Detection for "skipping" nodes (perhaps use average dtime?)
 | 
			
		||||
		-- It's sophisticated enough to take the acceleration in account
 | 
			
		||||
		local acc = self.object:get_acceleration()
 | 
			
		||||
@@ -235,7 +229,7 @@ local function rail_on_step(self, dtime)
 | 
			
		||||
			-- No rail found: set to the expected position
 | 
			
		||||
			pos = new_pos
 | 
			
		||||
			update.pos = true
 | 
			
		||||
			cart_dir = new_dir
 | 
			
		||||
			dir = new_dir
 | 
			
		||||
		end
 | 
			
		||||
	elseif self.old_pos and self.old_dir.y ~= 1 and not self.punched then
 | 
			
		||||
		-- Stop wiggle
 | 
			
		||||
@@ -245,21 +239,27 @@ local function rail_on_step(self, dtime)
 | 
			
		||||
	local railparams
 | 
			
		||||
 | 
			
		||||
	-- dir:         New moving direction of the cart
 | 
			
		||||
	-- switch_keys: Currently pressed L/R key, used to ignore the key on the next rail node
 | 
			
		||||
	local dir, switch_keys = carts:get_rail_direction(
 | 
			
		||||
		pos, cart_dir, ctrl, self.old_switch, self.railtype
 | 
			
		||||
	-- switch_keys: Currently pressed L(1) or R(2) key,
 | 
			
		||||
	--              used to ignore the key on the next rail node
 | 
			
		||||
	local switch_keys
 | 
			
		||||
	dir, switch_keys = carts:get_rail_direction(
 | 
			
		||||
		pos, dir, ctrl, self.old_switch, self.railtype
 | 
			
		||||
	)
 | 
			
		||||
	local dir_changed = not vector.equals(dir, self.old_dir)
 | 
			
		||||
	dir_changed = not vector.equals(dir, self.old_dir)
 | 
			
		||||
 | 
			
		||||
	local new_acc = {x=0, y=0, z=0}
 | 
			
		||||
	local acc = 0
 | 
			
		||||
	if stop_wiggle or vector.equals(dir, {x=0, y=0, z=0}) then
 | 
			
		||||
		dir = vector.new(self.old_dir)
 | 
			
		||||
		vel = {x = 0, y = 0, z = 0}
 | 
			
		||||
		local pos_r = vector.round(pos)
 | 
			
		||||
		if not carts:is_rail(pos_r, self.railtype)
 | 
			
		||||
				and self.old_pos then
 | 
			
		||||
			pos = self.old_pos
 | 
			
		||||
		elseif not stop_wiggle then
 | 
			
		||||
			-- End of rail: Smooth out.
 | 
			
		||||
			pos = pos_r
 | 
			
		||||
			dir_changed = false
 | 
			
		||||
			dir.y = 0
 | 
			
		||||
		else
 | 
			
		||||
			pos.y = math.floor(pos.y + 0.5)
 | 
			
		||||
		end
 | 
			
		||||
@@ -286,7 +286,7 @@ local function rail_on_step(self, dtime)
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
		-- Slow down or speed up..
 | 
			
		||||
		local acc = dir.y * -4.0
 | 
			
		||||
		acc = dir.y * -4.0
 | 
			
		||||
 | 
			
		||||
		-- Get rail for corrected position
 | 
			
		||||
		railparams = get_railparams(pos)
 | 
			
		||||
@@ -304,25 +304,22 @@ local function rail_on_step(self, dtime)
 | 
			
		||||
				acc = acc - 0.4
 | 
			
		||||
			end
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
		new_acc = vector.multiply(dir, acc)
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	-- Limits
 | 
			
		||||
	local max_vel = carts.speed_max
 | 
			
		||||
	for _, v in pairs({"x","y","z"}) do
 | 
			
		||||
		if math.abs(vel[v]) > max_vel then
 | 
			
		||||
			vel[v] = carts:get_sign(vel[v]) * max_vel
 | 
			
		||||
			new_acc[v] = 0
 | 
			
		||||
	-- Limit cart speed
 | 
			
		||||
	local vel_len = vector.length(vel)
 | 
			
		||||
	if vel_len > carts.speed_max then
 | 
			
		||||
		vel = vector.multiply(vel, carts.speed_max / vel_len)
 | 
			
		||||
		update.vel = true
 | 
			
		||||
	end
 | 
			
		||||
	if vel_len >= carts.speed_max and acc > 0 then
 | 
			
		||||
		acc = 0
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	self.object:set_acceleration(new_acc)
 | 
			
		||||
	self.object:set_acceleration(vector.multiply(dir, acc))
 | 
			
		||||
 | 
			
		||||
	self.old_pos = vector.round(pos)
 | 
			
		||||
	if not vector.equals(dir, {x=0, y=0, z=0}) and not stop_wiggle then
 | 
			
		||||
	self.old_dir = vector.new(dir)
 | 
			
		||||
	end
 | 
			
		||||
	self.old_switch = switch_keys
 | 
			
		||||
 | 
			
		||||
	if self.punched then
 | 
			
		||||
@@ -348,11 +345,11 @@ local function rail_on_step(self, dtime)
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	local yaw = 0
 | 
			
		||||
	if self.old_dir.x < 0 then
 | 
			
		||||
	if dir.x < 0 then
 | 
			
		||||
		yaw = 0.5
 | 
			
		||||
	elseif self.old_dir.x > 0 then
 | 
			
		||||
	elseif dir.x > 0 then
 | 
			
		||||
		yaw = 1.5
 | 
			
		||||
	elseif self.old_dir.z < 0 then
 | 
			
		||||
	elseif dir.z < 0 then
 | 
			
		||||
		yaw = 1
 | 
			
		||||
	end
 | 
			
		||||
	self.object:set_yaw(yaw * math.pi)
 | 
			
		||||
@@ -390,7 +387,7 @@ minetest.register_entity("carts:cart", cart_entity)
 | 
			
		||||
minetest.register_craftitem("carts:cart", {
 | 
			
		||||
	description = S("Cart") .. "\n" .. S("(Sneak+Click to pick up)"),
 | 
			
		||||
	inventory_image = minetest.inventorycube("carts_cart_top.png", "carts_cart_front.png", "carts_cart_side.png"),
 | 
			
		||||
	wield_image = "carts_cart_side.png",
 | 
			
		||||
	wield_image = "carts_cart_front.png",
 | 
			
		||||
	on_place = function(itemstack, placer, pointed_thing)
 | 
			
		||||
		local under = pointed_thing.under
 | 
			
		||||
		local node = minetest.get_node(under)
 | 
			
		||||
@@ -402,7 +399,7 @@ minetest.register_craftitem("carts:cart", {
 | 
			
		||||
				pointed_thing) or itemstack
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
		if not pointed_thing.type == "node" then
 | 
			
		||||
		if pointed_thing.type ~= "node" then
 | 
			
		||||
			return
 | 
			
		||||
		end
 | 
			
		||||
		if carts:is_rail(pointed_thing.under) then
 | 
			
		||||
@@ -416,8 +413,7 @@ minetest.register_craftitem("carts:cart", {
 | 
			
		||||
		minetest.sound_play({name = "default_place_node_metal", gain = 0.5},
 | 
			
		||||
			{pos = pointed_thing.above}, true)
 | 
			
		||||
 | 
			
		||||
		if not (creative and creative.is_enabled_for
 | 
			
		||||
				and creative.is_enabled_for(placer:get_player_name())) then
 | 
			
		||||
		if not minetest.is_creative_enabled(placer:get_player_name()) then
 | 
			
		||||
			itemstack:take_item()
 | 
			
		||||
		end
 | 
			
		||||
		return itemstack
 | 
			
		||||
 
 | 
			
		||||