mirror of
				https://codeberg.org/tenplus1/mobs_redo.git
				synced 2025-11-04 09:15:32 +01:00 
			
		
		
		
	Compare commits
	
		
			108 Commits
		
	
	
		
			245128f9e6
			...
			ca34cc2274
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					ca34cc2274 | ||
| 
						 | 
					168014b86f | ||
| 
						 | 
					6f8b6fe3f5 | ||
| 
						 | 
					dd16d63e8e | ||
| 
						 | 
					7bb5e2b382 | ||
| 
						 | 
					7b429df9e9 | ||
| 
						 | 
					0e72f0ca81 | ||
| 
						 | 
					fb42be6b28 | ||
| 
						 | 
					f54c3da9d7 | ||
| 
						 | 
					65e369e5fc | ||
| 
						 | 
					9f74408792 | ||
| 
						 | 
					18c7f0a422 | ||
| 
						 | 
					2fb7bf2c66 | ||
| 
						 | 
					f01e8a61d0 | ||
| 
						 | 
					b756aa50f5 | ||
| 
						 | 
					e83620553d | ||
| 
						 | 
					e5d1958e16 | ||
| 
						 | 
					6a4a02f3fb | ||
| 
						 | 
					5d88766b74 | ||
| 
						 | 
					d31da2d069 | ||
| 
						 | 
					00db86c924 | ||
| 
						 | 
					26ec61ee29 | ||
| 
						 | 
					a8ca00dc56 | ||
| 
						 | 
					4c80a55c04 | ||
| 
						 | 
					deee28fc59 | ||
| 
						 | 
					ab44080ff8 | ||
| 
						 | 
					9f46182bb4 | ||
| 
						 | 
					2535b5636e | ||
| 
						 | 
					2d014a75c4 | ||
| 
						 | 
					db3831dccf | ||
| 
						 | 
					29b2204f7c | ||
| 
						 | 
					7fbfd9d59c | ||
| 
						 | 
					e50d04a6aa | ||
| 
						 | 
					33589ebda0 | ||
| 
						 | 
					6670938c3d | ||
| 
						 | 
					f131806008 | ||
| 
						 | 
					49325c9c8d | ||
| 
						 | 
					8012250258 | ||
| 
						 | 
					ec44aa91c4 | ||
| 
						 | 
					f58841ab3e | ||
| 
						 | 
					350fc3647c | ||
| 
						 | 
					70c68f6ebc | ||
| 
						 | 
					c023ecc36f | ||
| 
						 | 
					9be934ec25 | ||
| 
						 | 
					f6e16a5503 | ||
| 
						 | 
					c06d071220 | ||
| 
						 | 
					ccbfe93f12 | ||
| 
						 | 
					6750d176ee | ||
| 
						 | 
					246b2769f7 | ||
| 
						 | 
					34b06df758 | ||
| 
						 | 
					0f1f3b4fb3 | ||
| 
						 | 
					774ce6671f | ||
| 
						 | 
					11e1d52cfb | ||
| 
						 | 
					c158e84e28 | ||
| 
						 | 
					10e4dd92a0 | ||
| 
						 | 
					10053e05a9 | ||
| 
						 | 
					425cadeb51 | ||
| 
						 | 
					2d1befacb3 | ||
| 
						 | 
					ad2ccc5895 | ||
| 
						 | 
					754321541a | ||
| 
						 | 
					622abd1486 | ||
| 
						 | 
					55eb893a9a | ||
| 
						 | 
					76ee3d0b51 | ||
| 
						 | 
					00ac9efc8c | ||
| 
						 | 
					bf32a09e5e | ||
| 
						 | 
					9489ff6965 | ||
| 
						 | 
					1dfd7e1af1 | ||
| 
						 | 
					4a6518eeba | ||
| 
						 | 
					a4d2918383 | ||
| 
						 | 
					bdea826b7c | ||
| 
						 | 
					d12576f0c8 | ||
| 
						 | 
					7f4d473fee | ||
| 
						 | 
					f7a1b27ea4 | ||
| 
						 | 
					f14050ad3c | ||
| 
						 | 
					b6fb1948e8 | ||
| 
						 | 
					67e4ede31b | ||
| 
						 | 
					3009da0efe | ||
| 
						 | 
					bd8be0905a | ||
| 
						 | 
					89523195d5 | ||
| 
						 | 
					c6dffd1390 | ||
| 
						 | 
					499d43a9aa | ||
| 
						 | 
					39002cf4e7 | ||
| 
						 | 
					477148962f | ||
| 
						 | 
					497ff7241f | ||
| 
						 | 
					9f02777f14 | ||
| 
						 | 
					ae62b1410d | ||
| 
						 | 
					81b5e40d09 | ||
| 
						 | 
					565c0851eb | ||
| 
						 | 
					cb465559a1 | ||
| 
						 | 
					469e35d6e0 | ||
| 
						 | 
					1271570780 | ||
| 
						 | 
					ec3c6fb518 | ||
| 
						 | 
					c4f56f4204 | ||
| 
						 | 
					4814f53885 | ||
| 
						 | 
					f033cd401c | ||
| 
						 | 
					903e81bdab | ||
| 
						 | 
					81dd3d75c0 | ||
| 
						 | 
					804f8b9a0c | ||
| 
						 | 
					edf0469009 | ||
| 
						 | 
					d20ea74890 | ||
| 
						 | 
					ee8c19ce21 | ||
| 
						 | 
					296fad85ca | ||
| 
						 | 
					d65b80fa51 | ||
| 
						 | 
					48bfa284d0 | ||
| 
						 | 
					b17a5bfe77 | ||
| 
						 | 
					dfdd55848d | ||
| 
						 | 
					e63b1b478e | ||
| 
						 | 
					ec122aa6de | 
							
								
								
									
										111
									
								
								api.txt
									
									
									
									
									
								
							
							
						
						
									
										111
									
								
								api.txt
									
									
									
									
									
								
							@@ -31,13 +31,15 @@ functions needed for the mob to work properly which contains the following:
 | 
				
			|||||||
   'hp_max'        has the maximum health value the mob can spawn with.
 | 
					   'hp_max'        has the maximum health value the mob can spawn with.
 | 
				
			||||||
   'armor'         holds strength of mob, 100 is normal, lower is more powerful
 | 
					   'armor'         holds strength of mob, 100 is normal, lower is more powerful
 | 
				
			||||||
                   and needs more hits and better weapons to kill.
 | 
					                   and needs more hits and better weapons to kill.
 | 
				
			||||||
   'passive'       when true allows animals to defend themselves when hit,
 | 
					   'passive'       when false allows animals to defend themselves when hit,
 | 
				
			||||||
                   otherwise they amble onwards.
 | 
					                   otherwise they amble onwards.
 | 
				
			||||||
   'walk_velocity' is the speed that your mob can walk around.
 | 
					   'walk_velocity' is the speed that your mob can walk around.
 | 
				
			||||||
   'run_velocity'  is the speed your mob can run with, usually when attacking.
 | 
					   'run_velocity'  is the speed your mob can run with, usually when attacking.
 | 
				
			||||||
   'stand_chance'  has a 0-100 chance value your mob will stand from walking.
 | 
					   'stand_chance'  has a 0-100 chance value your mob will stand from walking.
 | 
				
			||||||
   'walk_chance'   has a 0-100 chance value your mob will walk from standing,
 | 
					   'walk_chance'   has a 0-100 chance value your mob will walk from standing,
 | 
				
			||||||
                   set to 0 for jumping mobs only.
 | 
					                   set to 0 for jumping mobs only.
 | 
				
			||||||
 | 
					   'randomly_turn' if set to false then mob will not turn to face player or
 | 
				
			||||||
 | 
					                   randomly turn while walking or standing.
 | 
				
			||||||
   'jump'          when true allows your mob to jump updwards.
 | 
					   'jump'          when true allows your mob to jump updwards.
 | 
				
			||||||
   'jump_height'   holds the height your mob can jump, 0 to disable jumping.
 | 
					   'jump_height'   holds the height your mob can jump, 0 to disable jumping.
 | 
				
			||||||
   'stepheight'    height of a block that your mob can easily walk up onto,
 | 
					   'stepheight'    height of a block that your mob can easily walk up onto,
 | 
				
			||||||
@@ -54,6 +56,8 @@ functions needed for the mob to work properly which contains the following:
 | 
				
			|||||||
   'view_range'    how many nodes in distance the mob can see a player.
 | 
					   'view_range'    how many nodes in distance the mob can see a player.
 | 
				
			||||||
   'damage'        how many health points the mob does to a player or another
 | 
					   'damage'        how many health points the mob does to a player or another
 | 
				
			||||||
                   mob when melee attacking.
 | 
					                   mob when melee attacking.
 | 
				
			||||||
 | 
					   'damage_group'  group in which damage is dealt, dedaults to "fleshy".
 | 
				
			||||||
 | 
					   'damage_texture_modifier' applies texture modifier on hit e.g "^[brighten"
 | 
				
			||||||
   'knock_back'    when true has mobs falling backwards when hit, the greater
 | 
					   'knock_back'    when true has mobs falling backwards when hit, the greater
 | 
				
			||||||
                   the damage the more they move back.
 | 
					                   the damage the more they move back.
 | 
				
			||||||
   'fear_height'   is how high a cliff or edge has to be before the mob stops
 | 
					   'fear_height'   is how high a cliff or edge has to be before the mob stops
 | 
				
			||||||
@@ -62,8 +66,12 @@ functions needed for the mob to work properly which contains the following:
 | 
				
			|||||||
   'fall_damage'   when true causes falling to inflict damage.
 | 
					   'fall_damage'   when true causes falling to inflict damage.
 | 
				
			||||||
   'water_damage'  holds the damage per second infliced to mobs when standing in
 | 
					   'water_damage'  holds the damage per second infliced to mobs when standing in
 | 
				
			||||||
                   water.
 | 
					                   water.
 | 
				
			||||||
 | 
					   'air_damage'    holds damage per second inflicted to mob when standing in air.
 | 
				
			||||||
   'lava_damage'   holds the damage per second inflicted to mobs when standing
 | 
					   'lava_damage'   holds the damage per second inflicted to mobs when standing
 | 
				
			||||||
                   in lava or fire or an ignition source.
 | 
					                   in lava.
 | 
				
			||||||
 | 
					   'fire_damage'   holds the damage per second inflicted to mobs when standing
 | 
				
			||||||
 | 
					                   in fire.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   'light_damage'  holds the damage per second inflicted to mobs when light
 | 
					   'light_damage'  holds the damage per second inflicted to mobs when light
 | 
				
			||||||
                   level is between the min and max values below
 | 
					                   level is between the min and max values below
 | 
				
			||||||
   'light_damage_min' minimum light value when mob is affected (default: 14)
 | 
					   'light_damage_min' minimum light value when mob is affected (default: 14)
 | 
				
			||||||
@@ -73,7 +81,7 @@ functions needed for the mob to work properly which contains the following:
 | 
				
			|||||||
   'floats'        when set to 1 mob will float in water, 0 has them sink.
 | 
					   'floats'        when set to 1 mob will float in water, 0 has them sink.
 | 
				
			||||||
   'follow'        mobs follow player when holding any of the items which appear
 | 
					   'follow'        mobs follow player when holding any of the items which appear
 | 
				
			||||||
                   on this table, the same items can be fed to a mob to tame or
 | 
					                   on this table, the same items can be fed to a mob to tame or
 | 
				
			||||||
                   breed e.g. {"farming:wheat", "default:apple"}
 | 
					                   breed e.g. {"farming:wheat", "default:apple", "group:fish"}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   'reach'               is how far the mob can attack player when standing
 | 
					   'reach'               is how far the mob can attack player when standing
 | 
				
			||||||
                         nearby, default is 3 nodes.
 | 
					                         nearby, default is 3 nodes.
 | 
				
			||||||
@@ -115,6 +123,8 @@ functions needed for the mob to work properly which contains the following:
 | 
				
			|||||||
                         continue chasing.
 | 
					                         continue chasing.
 | 
				
			||||||
   'arrow'               holds the pre-defined arrow object to shoot when
 | 
					   'arrow'               holds the pre-defined arrow object to shoot when
 | 
				
			||||||
                         attacking.
 | 
					                         attacking.
 | 
				
			||||||
 | 
					   'arrow_override'      function that allows tweaking of arrow entity from
 | 
				
			||||||
 | 
					                         inside mob definition (self) passed to function.
 | 
				
			||||||
   'dogshoot_switch'     allows switching between attack types by using timers
 | 
					   'dogshoot_switch'     allows switching between attack types by using timers
 | 
				
			||||||
                         (1 for shoot, 2 for dogfight)
 | 
					                         (1 for shoot, 2 for dogfight)
 | 
				
			||||||
   'dogshoot_count_max'  contains how many seconds before switching from
 | 
					   'dogshoot_count_max'  contains how many seconds before switching from
 | 
				
			||||||
@@ -128,6 +138,8 @@ functions needed for the mob to work properly which contains the following:
 | 
				
			|||||||
                         e.g. {"player", "mobs_animal:chicken"}.
 | 
					                         e.g. {"player", "mobs_animal:chicken"}.
 | 
				
			||||||
   'runaway_from'        contains a table with mob names to run away from, add
 | 
					   'runaway_from'        contains a table with mob names to run away from, add
 | 
				
			||||||
                         "player" to list to runaway from player also.
 | 
					                         "player" to list to runaway from player also.
 | 
				
			||||||
 | 
					   'ignore_invisibility' When true mob will still be able to see and attack
 | 
				
			||||||
 | 
					                         player even if invisible (invisibility mod only).
 | 
				
			||||||
   'blood_amount'        contains the number of blood droplets to appear when
 | 
					   'blood_amount'        contains the number of blood droplets to appear when
 | 
				
			||||||
                         mob is hit.
 | 
					                         mob is hit.
 | 
				
			||||||
   'blood_texture'       has the texture name to use for droplets e.g.
 | 
					   'blood_texture'       has the texture name to use for droplets e.g.
 | 
				
			||||||
@@ -197,7 +209,8 @@ functions needed for the mob to work properly which contains the following:
 | 
				
			|||||||
   'double_melee_attack' when true has the api choose between 'punch' and
 | 
					   'double_melee_attack' when true has the api choose between 'punch' and
 | 
				
			||||||
                      'punch2' animations. [DEPRECATED]
 | 
					                      'punch2' animations. [DEPRECATED]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   'animation'       holds a table containing animation names and settings for use with mesh models:
 | 
					   'animation'       holds a table containing animation names and settings for use with
 | 
				
			||||||
 | 
					                     mesh models:
 | 
				
			||||||
      'stand_start'  start frame for when mob stands still.
 | 
					      'stand_start'  start frame for when mob stands still.
 | 
				
			||||||
      'stand_end'    end frame of stand animation.
 | 
					      'stand_end'    end frame of stand animation.
 | 
				
			||||||
      'stand_speed'  speed of animation in frames per second.
 | 
					      'stand_speed'  speed of animation in frames per second.
 | 
				
			||||||
@@ -223,6 +236,7 @@ functions needed for the mob to work properly which contains the following:
 | 
				
			|||||||
      'die_end'
 | 
					      'die_end'
 | 
				
			||||||
      'die_speed'
 | 
					      'die_speed'
 | 
				
			||||||
      'die_loop'     when set to false stops the animation looping.
 | 
					      'die_loop'     when set to false stops the animation looping.
 | 
				
			||||||
 | 
					      'die_rotate'   if true mob spins during death animation.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      Using '_loop = false' setting will stop any of the above animations from
 | 
					      Using '_loop = false' setting will stop any of the above animations from
 | 
				
			||||||
      looping.
 | 
					      looping.
 | 
				
			||||||
@@ -293,7 +307,11 @@ enhance mob functionality and have them do many interesting things:
 | 
				
			|||||||
   'custom_attack'  when set this function is called instead of the normal mob
 | 
					   'custom_attack'  when set this function is called instead of the normal mob
 | 
				
			||||||
                    melee attack, parameters are (self, to_attack) and if true
 | 
					                    melee attack, parameters are (self, to_attack) and if true
 | 
				
			||||||
                    is returned normal attack function continued.
 | 
					                    is returned normal attack function continued.
 | 
				
			||||||
   'on_die'         a function that is called when mob is killed (self, pos)
 | 
					   'on_die'         a function that is called when mob is killed (self, pos), also
 | 
				
			||||||
 | 
					                    has access to self.cause_of_death table.
 | 
				
			||||||
 | 
					   'on_flop'        function called when flying or swimmimng mob is no longer in
 | 
				
			||||||
 | 
					                    air/water, (self) paramater and return true to skip the built
 | 
				
			||||||
 | 
					                    in api flop feature.
 | 
				
			||||||
   'do_custom'      a custom function that is called every tick while mob is
 | 
					   'do_custom'      a custom function that is called every tick while mob is
 | 
				
			||||||
                    active and which has access to all of the self.* variables
 | 
					                    active and which has access to all of the self.* variables
 | 
				
			||||||
                    e.g. (self.health for health or self.standing_in for node
 | 
					                    e.g. (self.health for health or self.standing_in for node
 | 
				
			||||||
@@ -325,6 +343,37 @@ for each mob.
 | 
				
			|||||||
   'self.order'         set to "follow" or "stand" so that npc will follow owner
 | 
					   'self.order'         set to "follow" or "stand" so that npc will follow owner
 | 
				
			||||||
                        or stand it's ground
 | 
					                        or stand it's ground
 | 
				
			||||||
   'self.nametag'       contains the name of the mob which it can show above
 | 
					   'self.nametag'       contains the name of the mob which it can show above
 | 
				
			||||||
 | 
					   'self.state'         Current mob state.
 | 
				
			||||||
 | 
					                        "stand": no movement (except turning around)
 | 
				
			||||||
 | 
					                        "walk": walk or move around aimlessly
 | 
				
			||||||
 | 
					                        "attack": chase and attack enemy
 | 
				
			||||||
 | 
					                        "runaway": flee from target
 | 
				
			||||||
 | 
					                        "flop": bounce around aimlessly
 | 
				
			||||||
 | 
					                                (for swimming mobs that have stranded)
 | 
				
			||||||
 | 
					                        "die": during death
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Adding Mobs in World
 | 
				
			||||||
 | 
					--------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						mobs:add_mob(pos, {
 | 
				
			||||||
 | 
							name = "mobs_animal:chicken",
 | 
				
			||||||
 | 
							child = true,
 | 
				
			||||||
 | 
							owner = "singleplayer",
 | 
				
			||||||
 | 
							nametag = "Bessy",
 | 
				
			||||||
 | 
							ignore_count = true -- ignores mob count per map area
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns false if mob could not be added, returns mob object if spawned ok.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Removing Mob from World
 | 
				
			||||||
 | 
					-----------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						mobs:remove(self, decrease)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Removes mob 'self' from the world and if 'decrease' is true then the mob counter
 | 
				
			||||||
 | 
					will also be decreased by one.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Spawning Mobs in World
 | 
					Spawning Mobs in World
 | 
				
			||||||
@@ -356,6 +405,9 @@ default setting and can be omitted:
 | 
				
			|||||||
                          anytime
 | 
					                          anytime
 | 
				
			||||||
    'on_spawn'            is a custom function which runs after mob has spawned
 | 
					    'on_spawn'            is a custom function which runs after mob has spawned
 | 
				
			||||||
                          and gives self and pos values.
 | 
					                          and gives self and pos values.
 | 
				
			||||||
 | 
					    'on_map_load'         when true mobs will have a chance of spawning only
 | 
				
			||||||
 | 
					                          when new areas of map are loaded, interval will not be
 | 
				
			||||||
 | 
					                          used.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The older spawn functions are still active and working but have no defaults like
 | 
					The older spawn functions are still active and working but have no defaults like
 | 
				
			||||||
the mobs:spawn, so it is recommended to use the above instead.
 | 
					the mobs:spawn, so it is recommended to use the above instead.
 | 
				
			||||||
@@ -363,7 +415,7 @@ the mobs:spawn, so it is recommended to use the above instead.
 | 
				
			|||||||
mobs:register_spawn(name, nodes, max_light, min_light, chance,
 | 
					mobs:register_spawn(name, nodes, max_light, min_light, chance,
 | 
				
			||||||
   active_object_count, max_height, day_toggle)
 | 
					   active_object_count, max_height, day_toggle)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
mobs:spawn_specfic(name, nodes, neighbors, min_light, max_light, interval,
 | 
					mobs:spawn_specific(name, nodes, neighbors, min_light, max_light, interval,
 | 
				
			||||||
   chance, active_object_count, min_height, max_height, day_toggle, on_spawn)
 | 
					   chance, active_object_count, min_height, max_height, day_toggle, on_spawn)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
A simpler way to handle mob spawns has been added with the mobs:spawn(def)
 | 
					A simpler way to handle mob spawns has been added with the mobs:spawn(def)
 | 
				
			||||||
@@ -387,6 +439,24 @@ true the mob will not spawn.
 | 
				
			|||||||
    'name'   is the name of the animal/monster
 | 
					    'name'   is the name of the animal/monster
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Particle Effects
 | 
				
			||||||
 | 
					----------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					mobs:effect(pos, amount, texture, min_size, max_size, radius, gravity, glow, fall)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This function provides a quick way to spawn particles as an effect.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    'pos'       center position of particle effect.
 | 
				
			||||||
 | 
					    'amount'    how many particles.
 | 
				
			||||||
 | 
					    'texture'   texture filename to use for effect.
 | 
				
			||||||
 | 
					    'min_size'  smallest particle size.
 | 
				
			||||||
 | 
					    'max_size'  largest particle size.
 | 
				
			||||||
 | 
					    'radius'    how far particles spread outward from center.
 | 
				
			||||||
 | 
					    'gravity'   gravity applied to particles once they spawn.
 | 
				
			||||||
 | 
					    'glow'      number between 1 and 15 for glowing particles.
 | 
				
			||||||
 | 
					    'fall'      when true particles fall, false has them rising, nil has them scatter.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Making Arrows
 | 
					Making Arrows
 | 
				
			||||||
-------------
 | 
					-------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -399,6 +469,8 @@ This function registers a arrow for mobs with the attack type shoot.
 | 
				
			|||||||
       'visual'       same is in minetest.register_entity()
 | 
					       'visual'       same is in minetest.register_entity()
 | 
				
			||||||
       'visual_size'  same is in minetest.register_entity()
 | 
					       'visual_size'  same is in minetest.register_entity()
 | 
				
			||||||
       'textures'     same is in minetest.register_entity()
 | 
					       'textures'     same is in minetest.register_entity()
 | 
				
			||||||
 | 
					       'physical'     same is in minetest.register_entity() [default: false]
 | 
				
			||||||
 | 
					       'collide_with_objects'       same as above
 | 
				
			||||||
       'velocity'     the velocity of the arrow
 | 
					       'velocity'     the velocity of the arrow
 | 
				
			||||||
       'drop'         if set to true any arrows hitting a node will drop as item
 | 
					       'drop'         if set to true any arrows hitting a node will drop as item
 | 
				
			||||||
       'hit_player'   a function that is called when the arrow hits a player;
 | 
					       'hit_player'   a function that is called when the arrow hits a player;
 | 
				
			||||||
@@ -422,7 +494,9 @@ This function registers a arrow for mobs with the attack type shoot.
 | 
				
			|||||||
       'on_step'      is a custom function when arrow is active, nil for
 | 
					       'on_step'      is a custom function when arrow is active, nil for
 | 
				
			||||||
                      default.
 | 
					                      default.
 | 
				
			||||||
       'on_punch'     is a custom function when arrow is punched, nil by default
 | 
					       'on_punch'     is a custom function when arrow is punched, nil by default
 | 
				
			||||||
       'collisionbox' is hitbox table for arrow, {0,0,0,0,0,0} by default.
 | 
					       'collisionbox' is hitbox table for arrow, {-.1,-.1,-.1,.1,.1,.1} by default.
 | 
				
			||||||
 | 
					       'lifetime'     contains float value for how many seconds arrow exists in
 | 
				
			||||||
 | 
					                      world before being removed (default is 4.5 seconds).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Spawn Eggs
 | 
					Spawn Eggs
 | 
				
			||||||
@@ -610,6 +684,19 @@ Use this instead:
 | 
				
			|||||||
    mob_class:line_of_sight(pos1, pos2, stepsize)
 | 
					    mob_class:line_of_sight(pos1, pos2, stepsize)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					mobs:can_spawn(pos, name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This function checks the surrounding area at [pos] to see if there is enough empty
 | 
				
			||||||
 | 
					space to spawn mob [name], if so then a new position is returned for use,
 | 
				
			||||||
 | 
					otherwise nil is returned.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					mobs:is_node_dangerous(mob_object, nodename)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This function returns true if the node name given is harmful to the mob (mob_object),
 | 
				
			||||||
 | 
					it is mainly used when a mob is near a node it has to avoid.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
External Settings for "minetest.conf"
 | 
					External Settings for "minetest.conf"
 | 
				
			||||||
------------------------------------
 | 
					------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -620,6 +707,8 @@ External Settings for "minetest.conf"
 | 
				
			|||||||
                            is false)
 | 
					                            is false)
 | 
				
			||||||
   'mobs_spawn_protected'   if set to false then mobs will not spawn in protected
 | 
					   'mobs_spawn_protected'   if set to false then mobs will not spawn in protected
 | 
				
			||||||
                            areas (default is true)
 | 
					                            areas (default is true)
 | 
				
			||||||
 | 
					   'mobs_spawn_monster_protected'   if set to false then monsters will not spawn in
 | 
				
			||||||
 | 
					                            protected areas (default is true)
 | 
				
			||||||
   'remove_far_mobs'        if true then untamed mobs that are outside players
 | 
					   'remove_far_mobs'        if true then untamed mobs that are outside players
 | 
				
			||||||
                             visual range will be removed (default is true)
 | 
					                             visual range will be removed (default is true)
 | 
				
			||||||
   'mobname'                can change specific mob chance rate (0 to disable) and
 | 
					   'mobname'                can change specific mob chance rate (0 to disable) and
 | 
				
			||||||
@@ -640,6 +729,10 @@ External Settings for "minetest.conf"
 | 
				
			|||||||
                            function.
 | 
					                            function.
 | 
				
			||||||
   'mob_nospawn_range'      Minimum range a mob can spawn near player (def: 12)
 | 
					   'mob_nospawn_range'      Minimum range a mob can spawn near player (def: 12)
 | 
				
			||||||
   'mob_active_limit'       Number of active mobs in game, 0 for unlimited
 | 
					   'mob_active_limit'       Number of active mobs in game, 0 for unlimited
 | 
				
			||||||
 | 
					   'mob_area_spawn'         When true will check surrounding area the size of the
 | 
				
			||||||
 | 
					                            mob for obstructions before spawning, otherwise it
 | 
				
			||||||
 | 
					                            defaults to checking the height of the mob only.
 | 
				
			||||||
 | 
					   'mob_smooth_rotate'      Enables smooth rotation when mobs turn by default.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Players can override the spawn chance for each mob registered by adding a line
 | 
					Players can override the spawn chance for each mob registered by adding a line
 | 
				
			||||||
to their minetest.conf file with a new value, the lower the value the more each
 | 
					to their minetest.conf file with a new value, the lower the value the more each
 | 
				
			||||||
@@ -651,8 +744,8 @@ mobs_monster:sand_monster 100
 | 
				
			|||||||
...you can also change how many of a certain mob appear in an active mapblock by
 | 
					...you can also change how many of a certain mob appear in an active mapblock by
 | 
				
			||||||
adding a comma and then a new value e.g.
 | 
					adding a comma and then a new value e.g.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
mobs_animal:cow 8000,4            <-- 4 cows per mapblock at 8000 spawn chance
 | 
					mobs_animal:cow = 8000,4            <-- 4 cows per mapblock at 8000 spawn chance
 | 
				
			||||||
mobs_monster:dirt_monster ,20     <-- 20 dirt monsters per mapblock
 | 
					mobs_monster:dirt_monster = ,20     <-- 20 dirt monsters per mapblock
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Rideable Horse Example Mob
 | 
					Rideable Horse Example Mob
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										62
									
								
								crafts.lua
									
									
									
									
									
								
							
							
						
						
									
										62
									
								
								crafts.lua
									
									
									
									
									
								
							@@ -5,14 +5,13 @@ local S = mobs.intllib
 | 
				
			|||||||
minetest.register_craftitem("mobs:nametag", {
 | 
					minetest.register_craftitem("mobs:nametag", {
 | 
				
			||||||
	description = S("Name Tag"),
 | 
						description = S("Name Tag"),
 | 
				
			||||||
	inventory_image = "mobs_nametag.png",
 | 
						inventory_image = "mobs_nametag.png",
 | 
				
			||||||
	groups = {flammable = 2}
 | 
						groups = {flammable = 2, nametag = 1}
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if minetest.get_modpath("dye") and minetest.get_modpath("farming") then
 | 
					if minetest.get_modpath("dye") and minetest.get_modpath("farming") then
 | 
				
			||||||
	minetest.register_craft({
 | 
						minetest.register_craft({
 | 
				
			||||||
		type = "shapeless",
 | 
					 | 
				
			||||||
		output = "mobs:nametag",
 | 
							output = "mobs:nametag",
 | 
				
			||||||
		recipe = {"default:paper", "dye:black", "farming:string"}
 | 
							recipe = {{"default:paper", "dye:black", "farming:string"}}
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -20,7 +19,7 @@ end
 | 
				
			|||||||
minetest.register_craftitem("mobs:leather", {
 | 
					minetest.register_craftitem("mobs:leather", {
 | 
				
			||||||
	description = S("Leather"),
 | 
						description = S("Leather"),
 | 
				
			||||||
	inventory_image = "mobs_leather.png",
 | 
						inventory_image = "mobs_leather.png",
 | 
				
			||||||
	groups = {flammable = 2}
 | 
						groups = {flammable = 2, leather = 1}
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- raw meat
 | 
					-- raw meat
 | 
				
			||||||
@@ -115,11 +114,27 @@ minetest.register_craft({
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- level 2 protection rune
 | 
				
			||||||
 | 
					minetest.register_craftitem("mobs:protector2", {
 | 
				
			||||||
 | 
						description = S("Mob Protection Rune (Level 2)"),
 | 
				
			||||||
 | 
						inventory_image = "mobs_protector2.png",
 | 
				
			||||||
 | 
						groups = {flammable = 2}
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					minetest.register_craft({
 | 
				
			||||||
 | 
						output = "mobs:protector2",
 | 
				
			||||||
 | 
						recipe = {
 | 
				
			||||||
 | 
							{"mobs:protector", "default:mese_crystal", "mobs:protector"},
 | 
				
			||||||
 | 
							{"default:mese_crystal", "default:diamondblock", "default:mese_crystal"},
 | 
				
			||||||
 | 
							{"mobs:protector", "default:mese_crystal", "mobs:protector"}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- saddle
 | 
					-- saddle
 | 
				
			||||||
minetest.register_craftitem("mobs:saddle", {
 | 
					minetest.register_craftitem("mobs:saddle", {
 | 
				
			||||||
	description = S("Saddle"),
 | 
						description = S("Saddle"),
 | 
				
			||||||
	inventory_image = "mobs_saddle.png",
 | 
						inventory_image = "mobs_saddle.png",
 | 
				
			||||||
	groups = {flammable = 2}
 | 
						groups = {flammable = 2, saddle = 1}
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_craft({
 | 
					minetest.register_craft({
 | 
				
			||||||
@@ -133,7 +148,7 @@ minetest.register_craft({
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- make sure we can register fences
 | 
					-- make sure we can register fences
 | 
				
			||||||
if default.register_fence then
 | 
					if minetest.get_modpath("default") and default.register_fence then
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- mob fence (looks like normal fence but collision is 2 high)
 | 
					-- mob fence (looks like normal fence but collision is 2 high)
 | 
				
			||||||
default.register_fence("mobs:fence_wood", {
 | 
					default.register_fence("mobs:fence_wood", {
 | 
				
			||||||
@@ -149,6 +164,7 @@ default.register_fence("mobs:fence_wood", {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- mob fence top (has enlarged collisionbox to stop mobs getting over)
 | 
					-- mob fence top (has enlarged collisionbox to stop mobs getting over)
 | 
				
			||||||
minetest.register_node("mobs:fence_top", {
 | 
					minetest.register_node("mobs:fence_top", {
 | 
				
			||||||
@@ -181,8 +197,6 @@ minetest.register_craft({
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- items that can be used as fuel
 | 
					-- items that can be used as fuel
 | 
				
			||||||
minetest.register_craft({
 | 
					minetest.register_craft({
 | 
				
			||||||
@@ -283,12 +297,18 @@ minetest.register_tool(":mobs:mob_reset_stick", {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			tex_obj = obj
 | 
								tex_obj = obj
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								-- get base texture
 | 
				
			||||||
 | 
								local bt = tex_obj:get_luaentity().base_texture[1]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if type(bt) ~= "string" then
 | 
				
			||||||
 | 
									bt = ""
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			local name = user:get_player_name()
 | 
								local name = user:get_player_name()
 | 
				
			||||||
			local tex = ""
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
			minetest.show_formspec(name, "mobs_texture", "size[8,4]"
 | 
								minetest.show_formspec(name, "mobs_texture", "size[8,4]"
 | 
				
			||||||
			.. "field[0.5,1;7.5,0;name;"
 | 
								.. "field[0.5,1;7.5,0;name;"
 | 
				
			||||||
			.. minetest.formspec_escape(S("Enter texture:")) .. ";" .. tex .. "]"
 | 
								.. minetest.formspec_escape(S("Enter texture:")) .. ";" .. bt .. "]"
 | 
				
			||||||
			.. "button_exit[2.5,3.5;3,1;mob_texture_change;"
 | 
								.. "button_exit[2.5,3.5;3,1;mob_texture_change;"
 | 
				
			||||||
			.. minetest.formspec_escape(S("Change")) .. "]")
 | 
								.. minetest.formspec_escape(S("Change")) .. "]")
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
@@ -331,3 +351,25 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
 | 
				
			|||||||
		tex_obj = nil
 | 
							tex_obj = nil
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
end)
 | 
					end)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- Meat Block (thanks to painterlypack.net for allowing me to use these textures)
 | 
				
			||||||
 | 
					minetest.register_node("mobs:meatblock", {
 | 
				
			||||||
 | 
						description = S("Meat Block"),
 | 
				
			||||||
 | 
						tiles = {"mobs_meat_top.png", "mobs_meat_bottom.png", "mobs_meat_side.png"},
 | 
				
			||||||
 | 
						paramtype2 = "facedir",
 | 
				
			||||||
 | 
						groups = {choppy = 1, oddly_breakable_by_hand = 1, flammable = 2},
 | 
				
			||||||
 | 
						sounds = default and default.node_sound_leaves_defaults(),
 | 
				
			||||||
 | 
						on_place = minetest.rotate_node,
 | 
				
			||||||
 | 
						on_use = minetest.item_eat(20)
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					minetest.register_craft({
 | 
				
			||||||
 | 
						output = "mobs:meatblock",
 | 
				
			||||||
 | 
					--	type = "shapeless",
 | 
				
			||||||
 | 
						recipe = {
 | 
				
			||||||
 | 
							{"group:food_meat", "group:food_meat", "group:food_meat"},
 | 
				
			||||||
 | 
							{"group:food_meat", "group:food_meat", "group:food_meat"},
 | 
				
			||||||
 | 
							{"group:food_meat", "group:food_meat", "group:food_meat"}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
default
 | 
					default?
 | 
				
			||||||
tnt?
 | 
					tnt?
 | 
				
			||||||
dye?
 | 
					dye?
 | 
				
			||||||
farming?
 | 
					farming?
 | 
				
			||||||
@@ -7,3 +7,5 @@ intllib?
 | 
				
			|||||||
lucky_block?
 | 
					lucky_block?
 | 
				
			||||||
cmi?
 | 
					cmi?
 | 
				
			||||||
toolranks?
 | 
					toolranks?
 | 
				
			||||||
 | 
					pathfinder?
 | 
				
			||||||
 | 
					player_api?
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										8
									
								
								init.lua
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								init.lua
									
									
									
									
									
								
							@@ -1,6 +1,12 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
local path = minetest.get_modpath("mobs")
 | 
					local path = minetest.get_modpath("mobs")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- Peaceful player privilege
 | 
				
			||||||
 | 
					minetest.register_privilege("peaceful_player", {
 | 
				
			||||||
 | 
						description = "Prevents Mobs Redo mobs from attacking player",
 | 
				
			||||||
 | 
						give_to_singleplayer = false
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- Mob API
 | 
					-- Mob API
 | 
				
			||||||
dofile(path .. "/api.lua")
 | 
					dofile(path .. "/api.lua")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -16,4 +22,4 @@ dofile(path .. "/spawner.lua")
 | 
				
			|||||||
-- Lucky Blocks
 | 
					-- Lucky Blocks
 | 
				
			||||||
dofile(path .. "/lucky_block.lua")
 | 
					dofile(path .. "/lucky_block.lua")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.log("action", "[MOD] Mobs Redo loaded")
 | 
					print("[MOD] Mobs Redo loaded")
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										45
									
								
								intllib.lua
									
									
									
									
									
								
							
							
						
						
									
										45
									
								
								intllib.lua
									
									
									
									
									
								
							@@ -1,45 +0,0 @@
 | 
				
			|||||||
 | 
					 | 
				
			||||||
-- Fallback functions for when `intllib` is not installed.
 | 
					 | 
				
			||||||
-- Code released under Unlicense <http://unlicense.org>.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- Get the latest version of this file at:
 | 
					 | 
				
			||||||
--   https://raw.githubusercontent.com/minetest-mods/intllib/master/lib/intllib.lua
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
local function format(str, ...)
 | 
					 | 
				
			||||||
	local args = { ... }
 | 
					 | 
				
			||||||
	local function repl(escape, open, num, close)
 | 
					 | 
				
			||||||
		if escape == "" then
 | 
					 | 
				
			||||||
			local replacement = tostring(args[tonumber(num)])
 | 
					 | 
				
			||||||
			if open == "" then
 | 
					 | 
				
			||||||
				replacement = replacement..close
 | 
					 | 
				
			||||||
			end
 | 
					 | 
				
			||||||
			return replacement
 | 
					 | 
				
			||||||
		else
 | 
					 | 
				
			||||||
			return "@"..open..num..close
 | 
					 | 
				
			||||||
		end
 | 
					 | 
				
			||||||
	end
 | 
					 | 
				
			||||||
	return (str:gsub("(@?)@(%(?)(%d+)(%)?)", repl))
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
local gettext, ngettext
 | 
					 | 
				
			||||||
if minetest.get_modpath("intllib") then
 | 
					 | 
				
			||||||
	if intllib.make_gettext_pair then
 | 
					 | 
				
			||||||
		-- New method using gettext.
 | 
					 | 
				
			||||||
		gettext, ngettext = intllib.make_gettext_pair()
 | 
					 | 
				
			||||||
	else
 | 
					 | 
				
			||||||
		-- Old method using text files.
 | 
					 | 
				
			||||||
		gettext = intllib.Getter()
 | 
					 | 
				
			||||||
	end
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- Fill in missing functions.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
gettext = gettext or function(msgid, ...)
 | 
					 | 
				
			||||||
	return format(msgid, ...)
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
ngettext = ngettext or function(msgid, msgid_plural, n, ...)
 | 
					 | 
				
			||||||
	return format(n==1 and msgid or msgid_plural, ...)
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
return gettext, ngettext
 | 
					 | 
				
			||||||
@@ -11,7 +11,7 @@ msgstr ""
 | 
				
			|||||||
"PO-Revision-Date: 2017-07-02 14:27+0200\n"
 | 
					"PO-Revision-Date: 2017-07-02 14:27+0200\n"
 | 
				
			||||||
"Last-Translator: Wuzzy <almikes@aol.com>\n"
 | 
					"Last-Translator: Wuzzy <almikes@aol.com>\n"
 | 
				
			||||||
"Language-Team: \n"
 | 
					"Language-Team: \n"
 | 
				
			||||||
"Language: de_DE\n"
 | 
					"Language: de\n"
 | 
				
			||||||
"MIME-Version: 1.0\n"
 | 
					"MIME-Version: 1.0\n"
 | 
				
			||||||
"Content-Type: text/plain; charset=UTF-8\n"
 | 
					"Content-Type: text/plain; charset=UTF-8\n"
 | 
				
			||||||
"Content-Transfer-Encoding: 8bit\n"
 | 
					"Content-Transfer-Encoding: 8bit\n"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										23
									
								
								locale/fr.po
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								locale/fr.po
									
									
									
									
									
								
							@@ -3,20 +3,19 @@
 | 
				
			|||||||
# This file is distributed under the same license as the PACKAGE package.
 | 
					# This file is distributed under the same license as the PACKAGE package.
 | 
				
			||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
 | 
					# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
 | 
					#, fuzzy
 | 
				
			||||||
msgid ""
 | 
					msgid ""
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
"Project-Id-Version: \n"
 | 
					"Project-Id-Version: \n"
 | 
				
			||||||
"Report-Msgid-Bugs-To: \n"
 | 
					"Report-Msgid-Bugs-To: \n"
 | 
				
			||||||
"POT-Creation-Date: 2017-07-29 09:13+0200\n"
 | 
					"POT-Creation-Date: 2017-07-29 09:13+0200\n"
 | 
				
			||||||
"PO-Revision-Date: 2017-07-29 09:20+0200\n"
 | 
					"PO-Revision-Date: 2020-08-13 21:20+0500\n"
 | 
				
			||||||
 | 
					"Last-Translator: Olivier Dragon <odragon@protonmail.com>\n"
 | 
				
			||||||
"Language-Team: \n"
 | 
					"Language-Team: \n"
 | 
				
			||||||
 | 
					"Language: fr\n"
 | 
				
			||||||
"MIME-Version: 1.0\n"
 | 
					"MIME-Version: 1.0\n"
 | 
				
			||||||
"Content-Type: text/plain; charset=UTF-8\n"
 | 
					"Content-Type: text/plain; charset=UTF-8\n"
 | 
				
			||||||
"Content-Transfer-Encoding: 8bit\n"
 | 
					"Content-Transfer-Encoding: 8bit\n"
 | 
				
			||||||
"X-Generator: Poedit 1.8.12\n"
 | 
					 | 
				
			||||||
"Last-Translator: fat115 <fat115@framasoft.org>\n"
 | 
					 | 
				
			||||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
 | 
					 | 
				
			||||||
"Language: fr\n"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: api.lua
 | 
					#: api.lua
 | 
				
			||||||
msgid "** Peaceful Mode Active - No Monsters Will Spawn"
 | 
					msgid "** Peaceful Mode Active - No Monsters Will Spawn"
 | 
				
			||||||
@@ -64,7 +63,7 @@ msgstr "Renommer"
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#: crafts.lua
 | 
					#: crafts.lua
 | 
				
			||||||
msgid "Name Tag"
 | 
					msgid "Name Tag"
 | 
				
			||||||
msgstr "Étiquette pour collier"
 | 
					msgstr "Étiquette de collier"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: crafts.lua
 | 
					#: crafts.lua
 | 
				
			||||||
msgid "Leather"
 | 
					msgid "Leather"
 | 
				
			||||||
@@ -102,18 +101,26 @@ msgstr "Selle"
 | 
				
			|||||||
msgid "Mob Fence"
 | 
					msgid "Mob Fence"
 | 
				
			||||||
msgstr "Clôture à animaux"
 | 
					msgstr "Clôture à animaux"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#: crafts.lua
 | 
				
			||||||
 | 
					msgid "Mob Fence Top"
 | 
				
			||||||
 | 
					msgstr "Haut de clôture à animaux"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: spawner.lua
 | 
					#: spawner.lua
 | 
				
			||||||
msgid "Mob Spawner"
 | 
					msgid "Mob Spawner"
 | 
				
			||||||
msgstr "Générateur de mob"
 | 
					msgstr "Générateur de mob"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: spawner.lua
 | 
					#: spawner.lua
 | 
				
			||||||
msgid "Mob MinLight MaxLight Amount PlayerDist"
 | 
					msgid "(mob name) (min light) (max light) (amount) (player distance) (Y offset)"
 | 
				
			||||||
msgstr "Mob MinLumière MaxLumière Quantité DistanceJoueur"
 | 
					msgstr "(Nom) (MinLumière) (MaxLumière) (Quantité) (Distance du Joueur) (Décalage en Y)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: spawner.lua
 | 
					#: spawner.lua
 | 
				
			||||||
msgid "Spawner Not Active (enter settings)"
 | 
					msgid "Spawner Not Active (enter settings)"
 | 
				
			||||||
msgstr "Générateur non actif (entrez les paramètres)"
 | 
					msgstr "Générateur non actif (entrez les paramètres)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#: spawner.lua
 | 
				
			||||||
 | 
					msgid "Command:"
 | 
				
			||||||
 | 
					msgstr "Commande:"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: spawner.lua
 | 
					#: spawner.lua
 | 
				
			||||||
msgid "Spawner Active (@1)"
 | 
					msgid "Spawner Active (@1)"
 | 
				
			||||||
msgstr "Générateur actif (@1)"
 | 
					msgstr "Générateur actif (@1)"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										34
									
								
								locale/mobs.de.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								locale/mobs.de.tr
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					# textdomain:mobs
 | 
				
			||||||
 | 
					#** Peaceful Mode Active - No Monsters Will Spawn=
 | 
				
			||||||
 | 
					@1 (Tamed)=@1 (Gezähmt)
 | 
				
			||||||
 | 
					@1 at full health (@2)=@1 bei voller Gesundheit (@2)
 | 
				
			||||||
 | 
					@1 has been tamed!=@1 wurde gezähmt!
 | 
				
			||||||
 | 
					@1 is owner!=@1 ist der Besitzer!
 | 
				
			||||||
 | 
					#Active Mob Limit Reached!=
 | 
				
			||||||
 | 
					Already protected!=Bereits geschützt!
 | 
				
			||||||
 | 
					#Change=
 | 
				
			||||||
 | 
					#Command:=
 | 
				
			||||||
 | 
					Enter name:=Namen eingeben:
 | 
				
			||||||
 | 
					#Enter texture:=
 | 
				
			||||||
 | 
					Lasso (right-click animal to put in inventory)=Lasso (Rechtsklick auf Tier, um es zu nehmen)
 | 
				
			||||||
 | 
					Leather=Leder
 | 
				
			||||||
 | 
					Meat=Fleisch
 | 
				
			||||||
 | 
					Missed!=Daneben!
 | 
				
			||||||
 | 
					Mob Fence=Kreaturen Zaun
 | 
				
			||||||
 | 
					#Mob Fence Top=
 | 
				
			||||||
 | 
					Mob Protection Rune=Kreaturschutzrune
 | 
				
			||||||
 | 
					#Mob Reset Stick=
 | 
				
			||||||
 | 
					#Mob Spawner=
 | 
				
			||||||
 | 
					Mob Spawner settings failed!=Kreaturenspawner-Einstellungen gescheitert!
 | 
				
			||||||
 | 
					Mob has been protected!=Kreatur wurde geschützt!
 | 
				
			||||||
 | 
					Name Tag=Namensschild
 | 
				
			||||||
 | 
					Net (right-click animal to put in inventory)=Netz (Rechtsklick auf Tier, um es zu nehmen)
 | 
				
			||||||
 | 
					Not tamed!=Nicht gezähmt!
 | 
				
			||||||
 | 
					Raw Meat=Rohes Fleisch
 | 
				
			||||||
 | 
					Rename=Umbenennen
 | 
				
			||||||
 | 
					Saddle=Sattel
 | 
				
			||||||
 | 
					Spawner Active (@1)=Spawner aktiv (@1)
 | 
				
			||||||
 | 
					Spawner Not Active (enter settings)=Nicht aktiv (Einstellungen eingeben)
 | 
				
			||||||
 | 
					Steel Shears (right-click to shear)=Stahlschere (Rechtsklick zum Scheren)
 | 
				
			||||||
 | 
					#Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] player_distance[1-20] y_offset[-10 to 10]”=
 | 
				
			||||||
 | 
					#lifetimer expired, removed @1=
 | 
				
			||||||
							
								
								
									
										34
									
								
								locale/mobs.en.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								locale/mobs.en.tr
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					# textdomain:mobs
 | 
				
			||||||
 | 
					#** Peaceful Mode Active - No Monsters Will Spawn=
 | 
				
			||||||
 | 
					#@1 (Tamed)=
 | 
				
			||||||
 | 
					#@1 at full health (@2)=
 | 
				
			||||||
 | 
					#@1 has been tamed!=
 | 
				
			||||||
 | 
					#@1 is owner!=
 | 
				
			||||||
 | 
					#Active Mob Limit Reached!=
 | 
				
			||||||
 | 
					#Already protected!=
 | 
				
			||||||
 | 
					#Change=
 | 
				
			||||||
 | 
					#Command:=
 | 
				
			||||||
 | 
					#Enter name:=
 | 
				
			||||||
 | 
					#Enter texture:=
 | 
				
			||||||
 | 
					#Lasso (right-click animal to put in inventory)=
 | 
				
			||||||
 | 
					#Leather=
 | 
				
			||||||
 | 
					#Meat=
 | 
				
			||||||
 | 
					#Missed!=
 | 
				
			||||||
 | 
					#Mob Fence=
 | 
				
			||||||
 | 
					#Mob Fence Top=
 | 
				
			||||||
 | 
					#Mob Protection Rune=
 | 
				
			||||||
 | 
					#Mob Reset Stick=
 | 
				
			||||||
 | 
					#Mob Spawner=
 | 
				
			||||||
 | 
					#Mob Spawner settings failed!=
 | 
				
			||||||
 | 
					#Mob has been protected!=
 | 
				
			||||||
 | 
					#Name Tag=
 | 
				
			||||||
 | 
					#Net (right-click animal to put in inventory)=
 | 
				
			||||||
 | 
					#Not tamed!=
 | 
				
			||||||
 | 
					#Raw Meat=
 | 
				
			||||||
 | 
					#Rename=
 | 
				
			||||||
 | 
					#Saddle=
 | 
				
			||||||
 | 
					#Spawner Active (@1)=
 | 
				
			||||||
 | 
					#Spawner Not Active (enter settings)=
 | 
				
			||||||
 | 
					#Steel Shears (right-click to shear)=
 | 
				
			||||||
 | 
					#Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] player_distance[1-20] y_offset[-10 to 10]”=
 | 
				
			||||||
 | 
					#lifetimer expired, removed @1=
 | 
				
			||||||
							
								
								
									
										34
									
								
								locale/mobs.es.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								locale/mobs.es.tr
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					# textdomain:mobs
 | 
				
			||||||
 | 
					#** Peaceful Mode Active - No Monsters Will Spawn=
 | 
				
			||||||
 | 
					@1 (Tamed)=@1 (Domesticado)
 | 
				
			||||||
 | 
					@1 at full health (@2)=@1 con salud llena (@2)
 | 
				
			||||||
 | 
					@1 has been tamed!=@1 ha sido domesticado!
 | 
				
			||||||
 | 
					@1 is owner!=@1 es el dueño!
 | 
				
			||||||
 | 
					#Active Mob Limit Reached!=
 | 
				
			||||||
 | 
					Already protected!=Ya está protegido!
 | 
				
			||||||
 | 
					#Change=
 | 
				
			||||||
 | 
					#Command:=
 | 
				
			||||||
 | 
					Enter name:=Ingrese nombre:
 | 
				
			||||||
 | 
					#Enter texture:=
 | 
				
			||||||
 | 
					Lasso (right-click animal to put in inventory)=Lazo (click derecho en animal para colocar en inventario)
 | 
				
			||||||
 | 
					Leather=Cuero
 | 
				
			||||||
 | 
					Meat=Carne
 | 
				
			||||||
 | 
					Missed!=Perdido!
 | 
				
			||||||
 | 
					#Mob Fence=
 | 
				
			||||||
 | 
					#Mob Fence Top=
 | 
				
			||||||
 | 
					Mob Protection Rune=Runa de protección de Mob
 | 
				
			||||||
 | 
					#Mob Reset Stick=
 | 
				
			||||||
 | 
					#Mob Spawner=
 | 
				
			||||||
 | 
					Mob Spawner settings failed!=Configuracion de generador de Mob falló!
 | 
				
			||||||
 | 
					Mob has been protected!=El mob ha sido protegido!
 | 
				
			||||||
 | 
					Name Tag=Nombrar etiqueta
 | 
				
			||||||
 | 
					Net (right-click animal to put in inventory)=Red (click derecho en animal para colocar en inventario)
 | 
				
			||||||
 | 
					Not tamed!=No domesticado!
 | 
				
			||||||
 | 
					Raw Meat=Carne cruda
 | 
				
			||||||
 | 
					Rename=Renombrar
 | 
				
			||||||
 | 
					Saddle=Montura
 | 
				
			||||||
 | 
					Spawner Active (@1)=Generador activo (@1)
 | 
				
			||||||
 | 
					Spawner Not Active (enter settings)=Generador no activo (ingrese config)
 | 
				
			||||||
 | 
					Steel Shears (right-click to shear)=Tijera de acero (click derecho para esquilar)
 | 
				
			||||||
 | 
					#Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] player_distance[1-20] y_offset[-10 to 10]”=
 | 
				
			||||||
 | 
					#lifetimer expired, removed @1=
 | 
				
			||||||
							
								
								
									
										34
									
								
								locale/mobs.fr.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								locale/mobs.fr.tr
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					# textdomain:mobs
 | 
				
			||||||
 | 
					** Peaceful Mode Active - No Monsters Will Spawn=** Mode pacifique activé - aucun monstre ne sera généré
 | 
				
			||||||
 | 
					@1 (Tamed)=@1 (apprivoisé)
 | 
				
			||||||
 | 
					@1 at full health (@2)=@1 est en pleine forme (@2) 
 | 
				
			||||||
 | 
					@1 has been tamed!=@1 a été apprivoisé ! 
 | 
				
			||||||
 | 
					@1 is owner!=Appartient à @1 !
 | 
				
			||||||
 | 
					Active Mob Limit Reached!=Limite atteinte du nombre des êtres vivants actifs !
 | 
				
			||||||
 | 
					Already protected!=Déjà protégé !
 | 
				
			||||||
 | 
					Change=Changer
 | 
				
			||||||
 | 
					Command:=Commande :
 | 
				
			||||||
 | 
					Enter name:=Saisissez un nom :
 | 
				
			||||||
 | 
					Enter texture:=Saisissez une texture :
 | 
				
			||||||
 | 
					Lasso (right-click animal to put in inventory)=Lasso (clic droit sur l'animal pour le mettre dans l'inventaire)
 | 
				
			||||||
 | 
					Leather=Cuir
 | 
				
			||||||
 | 
					Meat=Viande
 | 
				
			||||||
 | 
					Missed!=Raté !
 | 
				
			||||||
 | 
					Mob Fence= Clôture à animaux
 | 
				
			||||||
 | 
					Mob Fence Top=Haut de clôture à animaux
 | 
				
			||||||
 | 
					Mob Protection Rune=Rune de protection des animaux
 | 
				
			||||||
 | 
					Mob Reset Stick=Baguette de réinitialisation des êtres vivants
 | 
				
			||||||
 | 
					Mob Spawner=Créateur d'êtres vivants
 | 
				
			||||||
 | 
					Mob Spawner settings failed!=Échec des paramètres du créateur d'être vivants !
 | 
				
			||||||
 | 
					Mob has been protected!=L'animal a été protégé !
 | 
				
			||||||
 | 
					Name Tag=Étiquette de collier
 | 
				
			||||||
 | 
					Net (right-click animal to put in inventory)=Filet (clic droit sur l'animal pour le mettre dans l'inventaire)
 | 
				
			||||||
 | 
					Not tamed!=Non-apprivoisé !
 | 
				
			||||||
 | 
					Raw Meat=Viande crue
 | 
				
			||||||
 | 
					Rename=Renommer
 | 
				
			||||||
 | 
					Saddle=Selle
 | 
				
			||||||
 | 
					Spawner Active (@1)=Créateur actif (@1)
 | 
				
			||||||
 | 
					Spawner Not Active (enter settings)=Créateur non actif (entrez les paramètres)
 | 
				
			||||||
 | 
					Steel Shears (right-click to shear)=Ciseaux à laine (clic droit pour tondre)
 | 
				
			||||||
 | 
					Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] player_distance[1-20] y_offset[-10 to 10]”=Syntaxe : «name min_lumière[0-14] max_lumière[0-14] max_être_vivant_dans_région[0 pour désactiver] distance_joueur[1-20] décalage_y[-10 to 10]»
 | 
				
			||||||
 | 
					lifetimer expired, removed @1=Être immortel expiré ; @1 retiré
 | 
				
			||||||
							
								
								
									
										34
									
								
								locale/mobs.it.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								locale/mobs.it.tr
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					# textdomain:mobs
 | 
				
			||||||
 | 
					** Peaceful Mode Active - No Monsters Will Spawn=** Modalità pacifica attiva - non comparirà nessun mostro
 | 
				
			||||||
 | 
					@1 (Tamed)=@1 (Addomesticato)
 | 
				
			||||||
 | 
					@1 at full health (@2)=@1 in piena salute (@2)
 | 
				
			||||||
 | 
					@1 has been tamed!=@1 è stato addomesticato!
 | 
				
			||||||
 | 
					@1 is owner!=Il padrone è @1!
 | 
				
			||||||
 | 
					#Active Mob Limit Reached!=
 | 
				
			||||||
 | 
					Already protected!=Già protetto!
 | 
				
			||||||
 | 
					#Change=
 | 
				
			||||||
 | 
					#Command:=
 | 
				
			||||||
 | 
					Enter name:=Inserire il nome:
 | 
				
			||||||
 | 
					#Enter texture:=
 | 
				
			||||||
 | 
					Lasso (right-click animal to put in inventory)=Lazo (click di destro per mettere l'animale nell'inventario)
 | 
				
			||||||
 | 
					Leather=Pelle
 | 
				
			||||||
 | 
					Meat=Carne
 | 
				
			||||||
 | 
					Missed!=Mancato!
 | 
				
			||||||
 | 
					Mob Fence=Recinzione per mob
 | 
				
			||||||
 | 
					#Mob Fence Top=
 | 
				
			||||||
 | 
					Mob Protection Rune=Runa di protezione per mob
 | 
				
			||||||
 | 
					#Mob Reset Stick=
 | 
				
			||||||
 | 
					#Mob Spawner=
 | 
				
			||||||
 | 
					Mob Spawner settings failed!=Impostazioni del generatore di mob fallite!
 | 
				
			||||||
 | 
					Mob has been protected!=Il mob è stato protetto!
 | 
				
			||||||
 | 
					Name Tag=Targhetta
 | 
				
			||||||
 | 
					Net (right-click animal to put in inventory)=Rete (click destro per mettere l'animale nell'inventario)
 | 
				
			||||||
 | 
					Not tamed!=Non addomesticato!
 | 
				
			||||||
 | 
					Raw Meat=Carne cruda
 | 
				
			||||||
 | 
					Rename=Rinomina
 | 
				
			||||||
 | 
					Saddle=Sella
 | 
				
			||||||
 | 
					Spawner Active (@1)=Generatore attivo (@1)
 | 
				
			||||||
 | 
					Spawner Not Active (enter settings)=Generatore inattivo (inserire le impostazioni)
 | 
				
			||||||
 | 
					Steel Shears (right-click to shear)=Cesoie d'acciaio (click destro per tosare)
 | 
				
			||||||
 | 
					#Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] player_distance[1-20] y_offset[-10 to 10]”=
 | 
				
			||||||
 | 
					#lifetimer expired, removed @1=
 | 
				
			||||||
							
								
								
									
										34
									
								
								locale/mobs.ms.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								locale/mobs.ms.tr
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					# textdomain:mobs
 | 
				
			||||||
 | 
					** Peaceful Mode Active - No Monsters Will Spawn=** Mod Aman Diaktifkan - Tiada Raksasa Akan Muncul
 | 
				
			||||||
 | 
					@1 (Tamed)=@1 (Jinak)
 | 
				
			||||||
 | 
					@1 at full health (@2)=Mata kesihatan @1 telah penuh (@2)
 | 
				
			||||||
 | 
					@1 has been tamed!=@1 telah dijinakkan!
 | 
				
			||||||
 | 
					@1 is owner!=Ini hak milik @1!
 | 
				
			||||||
 | 
					#Active Mob Limit Reached!=
 | 
				
			||||||
 | 
					Already protected!=Telah dilindungi!
 | 
				
			||||||
 | 
					#Change=
 | 
				
			||||||
 | 
					#Command:=
 | 
				
			||||||
 | 
					Enter name:=Masukkan nama:
 | 
				
			||||||
 | 
					#Enter texture:=
 | 
				
			||||||
 | 
					Lasso (right-click animal to put in inventory)=Tanjul (klik-kanan haiwan untuk masukkan ke inventori)
 | 
				
			||||||
 | 
					Leather=Kulit
 | 
				
			||||||
 | 
					Meat=Daging Bakar
 | 
				
			||||||
 | 
					Missed!=Terlepas!
 | 
				
			||||||
 | 
					Mob Fence=Pagar Mob
 | 
				
			||||||
 | 
					#Mob Fence Top=
 | 
				
			||||||
 | 
					Mob Protection Rune=Rune Perlindungan Mob
 | 
				
			||||||
 | 
					#Mob Reset Stick=
 | 
				
			||||||
 | 
					#Mob Spawner=
 | 
				
			||||||
 | 
					Mob Spawner settings failed!=Penetapan Pewujud Mob gagal!
 | 
				
			||||||
 | 
					Mob has been protected!=Mob telah pun dilindungi!
 | 
				
			||||||
 | 
					Name Tag=Tanda Nama
 | 
				
			||||||
 | 
					Net (right-click animal to put in inventory)=Jaring (klik-kanan haiwan untuk masukkan ke inventori)
 | 
				
			||||||
 | 
					Not tamed!=Belum dijinakkan!
 | 
				
			||||||
 | 
					Raw Meat=Daging Mentah
 | 
				
			||||||
 | 
					Rename=Namakan semula
 | 
				
			||||||
 | 
					Saddle=Pelana
 | 
				
			||||||
 | 
					Spawner Active (@1)=Pewujud Mob Aktif (@1)
 | 
				
			||||||
 | 
					Spawner Not Active (enter settings)=Pewujud Mob Tidak Aktif (masukkan tetapan)
 | 
				
			||||||
 | 
					Steel Shears (right-click to shear)=Ketam Keluli (klik-kanan untuk mengetam bulu biri-biri)
 | 
				
			||||||
 | 
					#Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] player_distance[1-20] y_offset[-10 to 10]”=
 | 
				
			||||||
 | 
					#lifetimer expired, removed @1=
 | 
				
			||||||
							
								
								
									
										34
									
								
								locale/mobs.pt.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								locale/mobs.pt.tr
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					# textdomain:mobs
 | 
				
			||||||
 | 
					#** Peaceful Mode Active - No Monsters Will Spawn=
 | 
				
			||||||
 | 
					#@1 (Tamed)=
 | 
				
			||||||
 | 
					@1 at full health (@2)=@1 em plena saude (@2)
 | 
				
			||||||
 | 
					@1 has been tamed!=@1 foi domesticado!
 | 
				
			||||||
 | 
					@1 is owner!=Dono @1!
 | 
				
			||||||
 | 
					#Active Mob Limit Reached!=
 | 
				
			||||||
 | 
					#Already protected!=
 | 
				
			||||||
 | 
					#Change=
 | 
				
			||||||
 | 
					#Command:=
 | 
				
			||||||
 | 
					Enter name:=Insira um nome:
 | 
				
			||||||
 | 
					#Enter texture:=
 | 
				
			||||||
 | 
					Lasso (right-click animal to put in inventory)=Laço (clique-direito no animal para por no inventario)
 | 
				
			||||||
 | 
					Leather=Couro
 | 
				
			||||||
 | 
					Meat=Carne
 | 
				
			||||||
 | 
					Missed!=Faltou!
 | 
				
			||||||
 | 
					#Mob Fence=
 | 
				
			||||||
 | 
					#Mob Fence Top=
 | 
				
			||||||
 | 
					#Mob Protection Rune=
 | 
				
			||||||
 | 
					#Mob Reset Stick=
 | 
				
			||||||
 | 
					#Mob Spawner=
 | 
				
			||||||
 | 
					Mob Spawner settings failed!=Configuraçao de Spawnador do Mob falhou!
 | 
				
			||||||
 | 
					#Mob has been protected!=
 | 
				
			||||||
 | 
					Name Tag=Etiqueta
 | 
				
			||||||
 | 
					Net (right-click animal to put in inventory)=Net (clique-direito no animal para por no inventario)
 | 
				
			||||||
 | 
					Not tamed!=Indomesticado!
 | 
				
			||||||
 | 
					Raw Meat=Carne crua
 | 
				
			||||||
 | 
					Rename=Renomear
 | 
				
			||||||
 | 
					#Saddle=
 | 
				
			||||||
 | 
					Spawner Active (@1)=Spawnador Ativo (@1)
 | 
				
			||||||
 | 
					Spawner Not Active (enter settings)=Spawnador Inativo (configurar)
 | 
				
			||||||
 | 
					Steel Shears (right-click to shear)=Tesoura de Aço (clique-direito para tosquiar)
 | 
				
			||||||
 | 
					#Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] player_distance[1-20] y_offset[-10 to 10]”=
 | 
				
			||||||
 | 
					#lifetimer expired, removed @1=
 | 
				
			||||||
							
								
								
									
										34
									
								
								locale/mobs.ru.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								locale/mobs.ru.tr
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					# textdomain:mobs
 | 
				
			||||||
 | 
					** Peaceful Mode Active - No Monsters Will Spawn=** Мирный модус активирован - монстры не спаунятся
 | 
				
			||||||
 | 
					@1 (Tamed)=@1 (Прирученный)
 | 
				
			||||||
 | 
					@1 at full health (@2)=@1 при полном здоровье (@2)
 | 
				
			||||||
 | 
					@1 has been tamed!=@1 приручен
 | 
				
			||||||
 | 
					@1 is owner!=@1 владелец
 | 
				
			||||||
 | 
					#Active Mob Limit Reached!=
 | 
				
			||||||
 | 
					Already protected!=Уже защищен!
 | 
				
			||||||
 | 
					#Change=
 | 
				
			||||||
 | 
					#Command:=
 | 
				
			||||||
 | 
					Enter name:=Введите имя:
 | 
				
			||||||
 | 
					#Enter texture:=
 | 
				
			||||||
 | 
					Lasso (right-click animal to put in inventory)=Лассо (Правый клик - положить животное в инвентарь)
 | 
				
			||||||
 | 
					Leather=Кожа
 | 
				
			||||||
 | 
					Meat=Мясо
 | 
				
			||||||
 | 
					Missed!=Промазал!
 | 
				
			||||||
 | 
					Mob Fence=Забор от мобов
 | 
				
			||||||
 | 
					#Mob Fence Top=
 | 
				
			||||||
 | 
					Mob Protection Rune=Защитная руна мобов
 | 
				
			||||||
 | 
					#Mob Reset Stick=
 | 
				
			||||||
 | 
					#Mob Spawner=
 | 
				
			||||||
 | 
					Mob Spawner settings failed!=Настройки спаунера моба провалились
 | 
				
			||||||
 | 
					Mob has been protected!=Моб защищен!
 | 
				
			||||||
 | 
					Name Tag=Новый тэг
 | 
				
			||||||
 | 
					Net (right-click animal to put in inventory)=Сеть (Правый клик - положить животное в инвентарь)
 | 
				
			||||||
 | 
					Not tamed!=Не прирученный
 | 
				
			||||||
 | 
					Raw Meat=Сырое мясо
 | 
				
			||||||
 | 
					Rename=Переименовать
 | 
				
			||||||
 | 
					Saddle=Седло
 | 
				
			||||||
 | 
					Spawner Active (@1)=Активные спаунер (@1)
 | 
				
			||||||
 | 
					Spawner Not Active (enter settings)=Спаунер не активен (введите настройки)
 | 
				
			||||||
 | 
					Steel Shears (right-click to shear)=Ножницы (Правый клик - подстричь)
 | 
				
			||||||
 | 
					#Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] player_distance[1-20] y_offset[-10 to 10]”=
 | 
				
			||||||
 | 
					#lifetimer expired, removed @1=
 | 
				
			||||||
							
								
								
									
										34
									
								
								locale/mobs.tr.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								locale/mobs.tr.tr
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					# textdomain:mobs
 | 
				
			||||||
 | 
					#** Peaceful Mode Active - No Monsters Will Spawn=
 | 
				
			||||||
 | 
					#@1 (Tamed)=
 | 
				
			||||||
 | 
					@1 at full health (@2)=@1 tam canında (@2)
 | 
				
			||||||
 | 
					@1 has been tamed!=@1 tamamen evcilleştirilmiştir!
 | 
				
			||||||
 | 
					@1 is owner!=Sahibi @1!
 | 
				
			||||||
 | 
					#Active Mob Limit Reached!=
 | 
				
			||||||
 | 
					#Already protected!=
 | 
				
			||||||
 | 
					#Change=
 | 
				
			||||||
 | 
					#Command:=
 | 
				
			||||||
 | 
					Enter name:=İsim gir:
 | 
				
			||||||
 | 
					#Enter texture:=
 | 
				
			||||||
 | 
					Lasso (right-click animal to put in inventory)=Kement (hayvana sağ tıklayarak envantere koy)
 | 
				
			||||||
 | 
					Leather=Deri
 | 
				
			||||||
 | 
					Meat=Et
 | 
				
			||||||
 | 
					Missed!=Kaçırdın!
 | 
				
			||||||
 | 
					Mob Fence=Canavar Yaratıcı
 | 
				
			||||||
 | 
					#Mob Fence Top=
 | 
				
			||||||
 | 
					#Mob Protection Rune=
 | 
				
			||||||
 | 
					#Mob Reset Stick=
 | 
				
			||||||
 | 
					#Mob Spawner=
 | 
				
			||||||
 | 
					Mob Spawner settings failed!=Yaratıcı ayarları uygulanamadı.
 | 
				
			||||||
 | 
					#Mob has been protected!=
 | 
				
			||||||
 | 
					Name Tag=İsim etiketi
 | 
				
			||||||
 | 
					Net (right-click animal to put in inventory)=Ağ (hayvana sağ tıklayarak envantere koy)
 | 
				
			||||||
 | 
					Not tamed!=Evcil değil!
 | 
				
			||||||
 | 
					Raw Meat=Çiğ et
 | 
				
			||||||
 | 
					Rename=Yeniden adlandır
 | 
				
			||||||
 | 
					#Saddle=
 | 
				
			||||||
 | 
					Spawner Active (@1)=Yaratıcı aktif (@1)
 | 
				
			||||||
 | 
					Spawner Not Active (enter settings)=Yaratıcı aktif değil (ayarlara gir)
 | 
				
			||||||
 | 
					Steel Shears (right-click to shear)=Çelik makas (sağ tıklayarak kes)
 | 
				
			||||||
 | 
					#Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] player_distance[1-20] y_offset[-10 to 10]”=
 | 
				
			||||||
 | 
					#lifetimer expired, removed @1=
 | 
				
			||||||
							
								
								
									
										34
									
								
								locale/mobs.zh_CN.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								locale/mobs.zh_CN.tr
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					# textdomain:mobs
 | 
				
			||||||
 | 
					** Peaceful Mode Active - No Monsters Will Spawn=** 和平模式已激活——没有怪物会产生
 | 
				
			||||||
 | 
					@1 (Tamed)=@1(已驯服)
 | 
				
			||||||
 | 
					@1 at full health (@2)=@1已经满血(@2)
 | 
				
			||||||
 | 
					@1 has been tamed!=@1已经被驯服!
 | 
				
			||||||
 | 
					@1 is owner!=@1 是主人
 | 
				
			||||||
 | 
					#Active Mob Limit Reached!=
 | 
				
			||||||
 | 
					Already protected!=已经被保护!
 | 
				
			||||||
 | 
					#Change=
 | 
				
			||||||
 | 
					#Command:=
 | 
				
			||||||
 | 
					Enter name:=输入名称:
 | 
				
			||||||
 | 
					#Enter texture:=
 | 
				
			||||||
 | 
					Lasso (right-click animal to put in inventory)=套索(右键单击动物以放入物品栏)
 | 
				
			||||||
 | 
					Leather=皮革
 | 
				
			||||||
 | 
					Meat=肉
 | 
				
			||||||
 | 
					Missed!=没抓住!
 | 
				
			||||||
 | 
					Mob Fence=Mob 栅栏
 | 
				
			||||||
 | 
					#Mob Fence Top=
 | 
				
			||||||
 | 
					Mob Protection Rune=Mob 保护符文
 | 
				
			||||||
 | 
					#Mob Reset Stick=
 | 
				
			||||||
 | 
					#Mob Spawner=
 | 
				
			||||||
 | 
					Mob Spawner settings failed!=Mob 孵化器设置失败!
 | 
				
			||||||
 | 
					Mob has been protected!=Mob 已经被保护了!
 | 
				
			||||||
 | 
					Name Tag=名称标签
 | 
				
			||||||
 | 
					Net (right-click animal to put in inventory)=网(右键单击动物以放入物品栏)
 | 
				
			||||||
 | 
					Not tamed!=没有驯服!
 | 
				
			||||||
 | 
					Raw Meat=生肉
 | 
				
			||||||
 | 
					Rename=重新命名
 | 
				
			||||||
 | 
					Saddle=鞍
 | 
				
			||||||
 | 
					Spawner Active (@1)=孵化器正在运转(@1)
 | 
				
			||||||
 | 
					Spawner Not Active (enter settings)=孵化器未使用(输入设置)
 | 
				
			||||||
 | 
					Steel Shears (right-click to shear)=钢剪(右键单击以剪切)
 | 
				
			||||||
 | 
					#Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] player_distance[1-20] y_offset[-10 to 10]”=
 | 
				
			||||||
 | 
					#lifetimer expired, removed @1=
 | 
				
			||||||
							
								
								
									
										34
									
								
								locale/mobs.zh_TW.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								locale/mobs.zh_TW.tr
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					# textdomain:mobs
 | 
				
			||||||
 | 
					** Peaceful Mode Active - No Monsters Will Spawn=** 和平模式已激活——沒有怪物會產生
 | 
				
			||||||
 | 
					@1 (Tamed)=@1(已馴服)
 | 
				
			||||||
 | 
					@1 at full health (@2)=@1已經滿血(@2)
 | 
				
			||||||
 | 
					@1 has been tamed!=@1已經被馴服!
 | 
				
			||||||
 | 
					@1 is owner!=@1 是主人
 | 
				
			||||||
 | 
					#Active Mob Limit Reached!=
 | 
				
			||||||
 | 
					Already protected!=已經被保護!
 | 
				
			||||||
 | 
					#Change=
 | 
				
			||||||
 | 
					#Command:=
 | 
				
			||||||
 | 
					Enter name:=輸入名稱:
 | 
				
			||||||
 | 
					#Enter texture:=
 | 
				
			||||||
 | 
					Lasso (right-click animal to put in inventory)=套索(右鍵單擊動物以放入物品欄)
 | 
				
			||||||
 | 
					Leather=皮革
 | 
				
			||||||
 | 
					Meat=肉
 | 
				
			||||||
 | 
					Missed!=沒抓住!
 | 
				
			||||||
 | 
					Mob Fence=Mob 柵欄
 | 
				
			||||||
 | 
					#Mob Fence Top=
 | 
				
			||||||
 | 
					Mob Protection Rune=Mob 保護符文
 | 
				
			||||||
 | 
					#Mob Reset Stick=
 | 
				
			||||||
 | 
					#Mob Spawner=
 | 
				
			||||||
 | 
					Mob Spawner settings failed!=Mob 孵化器設置失敗!
 | 
				
			||||||
 | 
					Mob has been protected!=Mob 已經被保護了!
 | 
				
			||||||
 | 
					Name Tag=名稱標籤
 | 
				
			||||||
 | 
					Net (right-click animal to put in inventory)=網(右鍵單擊動物以放入物品欄)
 | 
				
			||||||
 | 
					Not tamed!=沒有馴服!
 | 
				
			||||||
 | 
					Raw Meat=生肉
 | 
				
			||||||
 | 
					Rename=重新命名
 | 
				
			||||||
 | 
					Saddle=鞍
 | 
				
			||||||
 | 
					Spawner Active (@1)=孵化器正在運轉(@1)
 | 
				
			||||||
 | 
					Spawner Not Active (enter settings)=孵化器未使用(輸入設置)
 | 
				
			||||||
 | 
					Steel Shears (right-click to shear)=鋼剪(右鍵單擊以剪切)
 | 
				
			||||||
 | 
					#Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] player_distance[1-20] y_offset[-10 to 10]”=
 | 
				
			||||||
 | 
					#lifetimer expired, removed @1=
 | 
				
			||||||
@@ -101,18 +101,26 @@ msgstr ""
 | 
				
			|||||||
msgid "Mob Fence"
 | 
					msgid "Mob Fence"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#: crafts.lua
 | 
				
			||||||
 | 
					msgid "Mob Fence Top"
 | 
				
			||||||
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: spawner.lua
 | 
					#: spawner.lua
 | 
				
			||||||
msgid "Mob Spawner"
 | 
					msgid "Mob Spawner"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: spawner.lua
 | 
					#: spawner.lua
 | 
				
			||||||
msgid "Mob MinLight MaxLight Amount PlayerDist"
 | 
					msgid "(mob name) (min light) (max light) (amount) (player distance) (Y offset)"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: spawner.lua
 | 
					#: spawner.lua
 | 
				
			||||||
msgid "Spawner Not Active (enter settings)"
 | 
					msgid "Spawner Not Active (enter settings)"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#@ spawner.lua
 | 
				
			||||||
 | 
					msgid "Command:"
 | 
				
			||||||
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: spawner.lua
 | 
					#: spawner.lua
 | 
				
			||||||
msgid "Spawner Active (@1)"
 | 
					msgid "Spawner Active (@1)"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										3
									
								
								mod.conf
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								mod.conf
									
									
									
									
									
								
							@@ -1 +1,4 @@
 | 
				
			|||||||
name = mobs
 | 
					name = mobs
 | 
				
			||||||
 | 
					depends =
 | 
				
			||||||
 | 
					optional_depends = default, tnt, dye, farming, invisibility, intllib, lucky_block, cmi, toolranks, pathfinder, player_api
 | 
				
			||||||
 | 
					description = Adds a mob api for mods to add animals or monsters etc.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										252
									
								
								mount.lua
									
									
									
									
									
								
							
							
						
						
									
										252
									
								
								mount.lua
									
									
									
									
									
								
							@@ -1,10 +1,9 @@
 | 
				
			|||||||
 | 
					 | 
				
			||||||
-- lib_mount by Blert2112 (edited by TenPlus1)
 | 
					-- lib_mount by Blert2112 (edited by TenPlus1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local enable_crash = false
 | 
					local is_50 = minetest.get_modpath("player_api") -- 5.x compatibility
 | 
				
			||||||
local crash_threshold = 6.5 -- ignored if enable_crash=false
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
------------------------------------------------------------------------------
 | 
					local abs, cos, floor, sin, sqrt, pi =
 | 
				
			||||||
 | 
							math.abs, math.cos, math.floor, math.sin, math.sqrt, math.pi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
--
 | 
					--
 | 
				
			||||||
-- Helper functions
 | 
					-- Helper functions
 | 
				
			||||||
@@ -55,27 +54,29 @@ local function get_sign(i)
 | 
				
			|||||||
	if i == 0 then
 | 
						if i == 0 then
 | 
				
			||||||
		return 0
 | 
							return 0
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		return i / math.abs(i)
 | 
							return i / abs(i)
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function get_velocity(v, yaw, y)
 | 
					local function get_velocity(v, yaw, y)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local x = -math.sin(yaw) * v
 | 
						local x = -sin(yaw) * v
 | 
				
			||||||
	local z =  math.cos(yaw) * v
 | 
						local z =  cos(yaw) * v
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return {x = x, y = y, z = z}
 | 
						return {x = x, y = y, z = z}
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function get_v(v)
 | 
					local function get_v(v)
 | 
				
			||||||
	return math.sqrt(v.x * v.x + v.z * v.z)
 | 
						return sqrt(v.x * v.x + v.z * v.z)
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function force_detach(player)
 | 
					local function force_detach(player)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if not player then return end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local attached_to = player:get_attach()
 | 
						local attached_to = player:get_attach()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if not attached_to then
 | 
						if not attached_to then
 | 
				
			||||||
@@ -84,45 +85,85 @@ local function force_detach(player)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	local entity = attached_to:get_luaentity()
 | 
						local entity = attached_to:get_luaentity()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if entity.driver
 | 
						if entity and entity.driver
 | 
				
			||||||
	and entity.driver == player then
 | 
						and entity.driver == player then
 | 
				
			||||||
 | 
					 | 
				
			||||||
		entity.driver = nil
 | 
							entity.driver = nil
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	player:set_detach()
 | 
						player:set_detach()
 | 
				
			||||||
	default.player_attached[player:get_player_name()] = false
 | 
					
 | 
				
			||||||
 | 
						local name = player:get_player_name()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if is_50 then
 | 
				
			||||||
 | 
							player_api.player_attached[name] = false
 | 
				
			||||||
 | 
							player_api.set_animation(player, "stand", 30)
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							default.player_attached[name] = false
 | 
				
			||||||
 | 
							default.player_set_animation(player, "stand", 30)
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	player:set_eye_offset({x = 0, y = 0, z = 0}, {x = 0, y = 0, z = 0})
 | 
						player:set_eye_offset({x = 0, y = 0, z = 0}, {x = 0, y = 0, z = 0})
 | 
				
			||||||
	default.player_set_animation(player, "stand" , 30)
 | 
						player:set_properties({visual_size = {x = 1, y = 1}})
 | 
				
			||||||
	player:set_properties({visual_size = {x = 1, y = 1} })
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-------------------------------------------------------------------------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_on_leaveplayer(function(player)
 | 
					minetest.register_on_leaveplayer(function(player)
 | 
				
			||||||
	force_detach(player)
 | 
						force_detach(player)
 | 
				
			||||||
end)
 | 
					end)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_on_shutdown(function()
 | 
					minetest.register_on_shutdown(function()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local players = minetest.get_connected_players()
 | 
						local players = minetest.get_connected_players()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for i = 1, #players do
 | 
						for i = 1, #players do
 | 
				
			||||||
		force_detach(players[i])
 | 
							force_detach(players[i])
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
end)
 | 
					end)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_on_dieplayer(function(player)
 | 
					minetest.register_on_dieplayer(function(player)
 | 
				
			||||||
	force_detach(player)
 | 
						force_detach(player)
 | 
				
			||||||
	return true
 | 
						return true
 | 
				
			||||||
end)
 | 
					end)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-------------------------------------------------------------------------------
 | 
					
 | 
				
			||||||
 | 
					-- Just for correct detaching
 | 
				
			||||||
 | 
					local function find_free_pos(pos)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						local check = {
 | 
				
			||||||
 | 
							{x = 1,  y = 0, z =  0},
 | 
				
			||||||
 | 
							{x = 1,  y = 1, z =  0},
 | 
				
			||||||
 | 
							{x = -1, y = 0, z =  0},
 | 
				
			||||||
 | 
							{x = -1, y = 1, z =  0},
 | 
				
			||||||
 | 
							{x = 0,  y = 0, z =  1},
 | 
				
			||||||
 | 
							{x = 0,  y = 1, z =  1},
 | 
				
			||||||
 | 
							{x = 0,  y = 0, z = -1},
 | 
				
			||||||
 | 
							{x = 0,  y = 1, z = -1}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for _, c in pairs(check) do
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							local npos = {x = pos.x + c.x, y = pos.y + c.y, z = pos.z + c.z}
 | 
				
			||||||
 | 
							local node = minetest.get_node_or_nil(npos)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if node and node.name then
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								local def = minetest.registered_nodes[node.name]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if def and not def.walkable and
 | 
				
			||||||
 | 
										def.liquidtype == "none" then
 | 
				
			||||||
 | 
									return npos
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return pos
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function mobs.attach(entity, player)
 | 
					function mobs.attach(entity, player)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local attach_at, eye_offset = {}, {}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	entity.player_rotation = entity.player_rotation or {x = 0, y = 0, z = 0}
 | 
						entity.player_rotation = entity.player_rotation or {x = 0, y = 0, z = 0}
 | 
				
			||||||
	entity.driver_attach_at = entity.driver_attach_at or {x = 0, y = 0, z = 0}
 | 
						entity.driver_attach_at = entity.driver_attach_at or {x = 0, y = 0, z = 0}
 | 
				
			||||||
	entity.driver_eye_offset = entity.driver_eye_offset or {x = 0, y = 0, z = 0}
 | 
						entity.driver_eye_offset = entity.driver_eye_offset or {x = 0, y = 0, z = 0}
 | 
				
			||||||
@@ -131,17 +172,23 @@ function mobs.attach(entity, player)
 | 
				
			|||||||
	local rot_view = 0
 | 
						local rot_view = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if entity.player_rotation.y == 90 then
 | 
						if entity.player_rotation.y == 90 then
 | 
				
			||||||
		rot_view = math.pi / 2
 | 
							rot_view = pi / 2
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	attach_at = entity.driver_attach_at
 | 
						local attach_at = entity.driver_attach_at
 | 
				
			||||||
	eye_offset = entity.driver_eye_offset
 | 
						local eye_offset = entity.driver_eye_offset
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	entity.driver = player
 | 
						entity.driver = player
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	force_detach(player)
 | 
						force_detach(player)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if is_50 then
 | 
				
			||||||
 | 
							player_api.player_attached[player:get_player_name()] = true
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							default.player_attached[player:get_player_name()] = true
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	player:set_attach(entity.object, "", attach_at, entity.player_rotation)
 | 
						player:set_attach(entity.object, "", attach_at, entity.player_rotation)
 | 
				
			||||||
	default.player_attached[player:get_player_name()] = true
 | 
					 | 
				
			||||||
	player:set_eye_offset(eye_offset, {x = 0, y = 0, z = 0})
 | 
						player:set_eye_offset(eye_offset, {x = 0, y = 0, z = 0})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	player:set_properties({
 | 
						player:set_properties({
 | 
				
			||||||
@@ -151,64 +198,63 @@ function mobs.attach(entity, player)
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minetest.after(0.2, function(name)
 | 
						minetest.after(0.2, function()
 | 
				
			||||||
		local player = minetest.get_player_by_name(name)
 | 
					
 | 
				
			||||||
		if player then
 | 
							if player and player:is_player() then
 | 
				
			||||||
			default.player_set_animation(player, "sit" , 30)
 | 
					
 | 
				
			||||||
 | 
								if is_50 then
 | 
				
			||||||
 | 
									player_api.set_animation(player, "sit", 30)
 | 
				
			||||||
 | 
								else
 | 
				
			||||||
 | 
									default.player_set_animation(player, "sit", 30)
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	end, player:get_player_name())
 | 
						end)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	player:set_look_horizontal(entity.object:get_yaw() - rot_view)
 | 
						player:set_look_horizontal(entity.object:get_yaw() - rot_view)
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function mobs.detach(player, offset)
 | 
					function mobs.detach(player)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	force_detach(player)
 | 
						force_detach(player)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	default.player_set_animation(player, "stand" , 30)
 | 
						minetest.after(0.1, function()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local pos = player:get_pos()
 | 
							if player and player:is_player() then
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pos = {
 | 
								local pos = find_free_pos(player:get_pos())
 | 
				
			||||||
		x = pos.x + offset.x,
 | 
					
 | 
				
			||||||
		y = pos.y + 0.2 + offset.y,
 | 
								pos.y = pos.y + 0.5
 | 
				
			||||||
		z = pos.z + offset.z
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minetest.after(0.1, function(name, pos)
 | 
					 | 
				
			||||||
		local player = minetest.get_player_by_name(name)
 | 
					 | 
				
			||||||
		if player then
 | 
					 | 
				
			||||||
			player:set_pos(pos)
 | 
								player:set_pos(pos)
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	end, player:get_player_name(), pos)
 | 
						end)
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime)
 | 
					function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local rot_steer, rot_view = math.pi/2, 0
 | 
						local yaw = entity.object:get_yaw() or 0
 | 
				
			||||||
 | 
						local rot_view = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if entity.player_rotation.y == 90 then
 | 
						if entity.player_rotation.y == 90 then
 | 
				
			||||||
		rot_steer, rot_view = 0, math.pi/2
 | 
							rot_view = pi / 2
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local acce_y = 0
 | 
						local acce_y = 0
 | 
				
			||||||
	local velo = entity.object:get_velocity()
 | 
						local velo = entity.object:get_velocity() ; if not velo then return end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	entity.v = get_v(velo) * get_sign(entity.v)
 | 
						entity.v = get_v(velo) * get_sign(entity.v)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	-- process controls
 | 
						-- process controls
 | 
				
			||||||
	if entity.driver then
 | 
						if entity.driver then
 | 
				
			||||||
 | 
					
 | 
				
			||||||
--print ("---velo", get_v(velo))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		local ctrl = entity.driver:get_player_control()
 | 
							local ctrl = entity.driver:get_player_control()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		-- move forwards
 | 
							-- move forwards
 | 
				
			||||||
		if ctrl.up then
 | 
							if ctrl.up then
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			entity.v = entity.v + entity.accel / 10
 | 
								entity.v = entity.v + entity.accel * dtime
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		-- move backwards
 | 
							-- move backwards
 | 
				
			||||||
		elseif ctrl.down then
 | 
							elseif ctrl.down then
 | 
				
			||||||
@@ -217,37 +263,58 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime)
 | 
				
			|||||||
				return
 | 
									return
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			entity.v = entity.v - entity.accel / 10
 | 
								entity.v = entity.v - entity.accel * dtime
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							-- mob rotation
 | 
				
			||||||
 | 
							local horz
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if entity.alt_turn == true then
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								horz = yaw
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if ctrl.left then
 | 
				
			||||||
 | 
									horz = horz + 0.05
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								elseif ctrl.right then
 | 
				
			||||||
 | 
									horz = horz - 0.05
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
								horz = entity.driver:get_look_horizontal() or 0
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		-- fix mob rotation
 | 
					 | 
				
			||||||
		local horz = entity.driver:get_look_horizontal() or 0
 | 
					 | 
				
			||||||
		entity.object:set_yaw(horz - entity.rotate)
 | 
							entity.object:set_yaw(horz - entity.rotate)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if can_fly then
 | 
							if can_fly then
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			-- fly up
 | 
								-- fly up
 | 
				
			||||||
			if ctrl.jump then
 | 
								if ctrl.jump then
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				velo.y = velo.y + 1
 | 
									velo.y = velo.y + 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if velo.y > entity.accel then velo.y = entity.accel end
 | 
									if velo.y > entity.accel then velo.y = entity.accel end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			elseif velo.y > 0 then
 | 
								elseif velo.y > 0 then
 | 
				
			||||||
				velo.y = velo.y - 0.1
 | 
					
 | 
				
			||||||
 | 
									velo.y = velo.y - dtime
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if velo.y < 0 then velo.y = 0 end
 | 
									if velo.y < 0 then velo.y = 0 end
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			-- fly down
 | 
								-- fly down
 | 
				
			||||||
			if ctrl.sneak then
 | 
								if ctrl.sneak then
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				velo.y = velo.y - 1
 | 
									velo.y = velo.y - 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if velo.y < -entity.accel then velo.y = -entity.accel end
 | 
									if velo.y < -entity.accel then velo.y = -entity.accel end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			elseif velo.y < 0 then
 | 
								elseif velo.y < 0 then
 | 
				
			||||||
				velo.y = velo.y + 0.1
 | 
					
 | 
				
			||||||
 | 
									velo.y = velo.y + dtime
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if velo.y > 0 then velo.y = 0 end
 | 
									if velo.y > 0 then velo.y = 0 end
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
 | 
					 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
 | 
					 | 
				
			||||||
			-- jump
 | 
								-- jump
 | 
				
			||||||
			if ctrl.jump then
 | 
								if ctrl.jump then
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -283,24 +350,23 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		entity.object:set_velocity({x = 0, y = 0, z = 0})
 | 
							entity.object:set_velocity({x = 0, y = 0, z = 0})
 | 
				
			||||||
		entity.v = 0
 | 
							entity.v = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	-- enforce speed limit forward and reverse
 | 
						-- enforce speed limit forward and reverse
 | 
				
			||||||
	local max_spd = entity.max_speed_reverse
 | 
						if entity.v > entity.max_speed_forward then
 | 
				
			||||||
 | 
							entity.v = entity.max_speed_forward
 | 
				
			||||||
	if get_sign(entity.v) >= 0 then
 | 
						elseif entity.v < -entity.max_speed_reverse then
 | 
				
			||||||
		max_spd = entity.max_speed_forward
 | 
							entity.v = -entity.max_speed_reverse
 | 
				
			||||||
	end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if math.abs(entity.v) > max_spd then
 | 
					 | 
				
			||||||
		entity.v = entity.v - get_sign(entity.v)
 | 
					 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	-- Set position, velocity and acceleration
 | 
						-- Set position, velocity and acceleration
 | 
				
			||||||
	local p = entity.object:get_pos()
 | 
						local p = entity.object:get_pos()
 | 
				
			||||||
	local new_velo
 | 
					
 | 
				
			||||||
	local new_acce = {x = 0, y = -9.8, z = 0}
 | 
						if not p then return end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						local new_acce = {x = 0, y = entity.fall_speed, z = 0}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	p.y = p.y - 0.5
 | 
						p.y = p.y - 0.5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -335,8 +401,9 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime)
 | 
				
			|||||||
			end
 | 
								end
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if entity.terrain_type == 2
 | 
							local terrain_type = entity.terrain_type
 | 
				
			||||||
		or entity.terrain_type == 3 then
 | 
					
 | 
				
			||||||
 | 
							if terrain_type == 2 or terrain_type == 3 then
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			new_acce.y = 0
 | 
								new_acce.y = 0
 | 
				
			||||||
			p.y = p.y + 1
 | 
								p.y = p.y + 1
 | 
				
			||||||
@@ -351,9 +418,13 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime)
 | 
				
			|||||||
					new_acce.y = 5
 | 
										new_acce.y = 5
 | 
				
			||||||
				end
 | 
									end
 | 
				
			||||||
			else
 | 
								else
 | 
				
			||||||
				if math.abs(velo.y) < 1 then
 | 
									if abs(velo.y) < 1 then
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					local pos = entity.object:get_pos()
 | 
										local pos = entity.object:get_pos()
 | 
				
			||||||
					pos.y = math.floor(pos.y) + 0.5
 | 
					
 | 
				
			||||||
 | 
										if not pos then return end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
										pos.y = floor(pos.y) + 0.5
 | 
				
			||||||
					entity.object:set_pos(pos)
 | 
										entity.object:set_pos(pos)
 | 
				
			||||||
					velo.y = 0
 | 
										velo.y = 0
 | 
				
			||||||
				end
 | 
									end
 | 
				
			||||||
@@ -363,48 +434,29 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime)
 | 
				
			|||||||
		end
 | 
							end
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	new_velo = get_velocity(v, entity.object:get_yaw() - rot_view, velo.y)
 | 
						local new_velo = get_velocity(v, yaw - rot_view, velo.y)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	new_acce.y = new_acce.y + acce_y
 | 
						new_acce.y = new_acce.y + acce_y
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	entity.object:set_velocity(new_velo)
 | 
						entity.object:set_velocity(new_velo)
 | 
				
			||||||
	entity.object:set_acceleration(new_acce)
 | 
						entity.object:set_acceleration(new_acce)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	-- CRASH!
 | 
					 | 
				
			||||||
	if enable_crash then
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		local intensity = entity.v2 - v
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if intensity >= crash_threshold then
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
--print("----------- crash", intensity)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			entity.object:punch(entity.object, 1.0, {
 | 
					 | 
				
			||||||
				full_punch_interval = 1.0,
 | 
					 | 
				
			||||||
				damage_groups = {fleshy = intensity}
 | 
					 | 
				
			||||||
			}, nil)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		end
 | 
					 | 
				
			||||||
	end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	entity.v2 = v
 | 
						entity.v2 = v
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- directional flying routine by D00Med (edited by TenPlus1)
 | 
					-- directional flying routine by D00Med (edited by TenPlus1)
 | 
				
			||||||
 | 
					function mobs.fly(entity, _, speed, shoots, arrow, moving_anim, stand_anim)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function mobs.fly(entity, dtime, speed, shoots, arrow, moving_anim, stand_anim)
 | 
						local ctrl = entity.driver:get_player_control() ; if not ctrl then return end
 | 
				
			||||||
 | 
					 | 
				
			||||||
	local ctrl = entity.driver:get_player_control()
 | 
					 | 
				
			||||||
	local velo = entity.object:get_velocity()
 | 
						local velo = entity.object:get_velocity()
 | 
				
			||||||
	local dir = entity.driver:get_look_dir()
 | 
						local dir = entity.driver:get_look_dir()
 | 
				
			||||||
	local yaw = entity.driver:get_look_horizontal() + 1.57 -- offset fix between old and new commands
 | 
						local yaw = entity.driver:get_look_horizontal() + 1.57
 | 
				
			||||||
	local rot_steer, rot_view = math.pi / 2, 0
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if entity.player_rotation.y == 90 then
 | 
						if not ctrl or not velo then return end
 | 
				
			||||||
		rot_steer, rot_view = 0, math.pi / 2
 | 
					 | 
				
			||||||
	end
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if ctrl.up then
 | 
						if ctrl.up then
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		entity.object:set_velocity({
 | 
							entity.object:set_velocity({
 | 
				
			||||||
			x = dir.x * speed,
 | 
								x = dir.x * speed,
 | 
				
			||||||
			y = dir.y * speed + 2,
 | 
								y = dir.y * speed + 2,
 | 
				
			||||||
@@ -412,9 +464,10 @@ function mobs.fly(entity, dtime, speed, shoots, arrow, moving_anim, stand_anim)
 | 
				
			|||||||
		})
 | 
							})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	elseif ctrl.down then
 | 
						elseif ctrl.down then
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		entity.object:set_velocity({
 | 
							entity.object:set_velocity({
 | 
				
			||||||
			x = -dir.x * speed,
 | 
								x = -dir.x * speed,
 | 
				
			||||||
			y = dir.y * speed + 2,
 | 
								y =  dir.y * speed + 2,
 | 
				
			||||||
			z = -dir.z * speed
 | 
								z = -dir.z * speed
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -422,7 +475,7 @@ function mobs.fly(entity, dtime, speed, shoots, arrow, moving_anim, stand_anim)
 | 
				
			|||||||
		entity.object:set_velocity({x = 0, y = -2, z = 0})
 | 
							entity.object:set_velocity({x = 0, y = -2, z = 0})
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	entity.object:set_yaw(yaw + math.pi + math.pi / 2 - entity.rotate)
 | 
						entity.object:set_yaw(yaw + pi + pi / 2 - entity.rotate)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	-- firing arrows
 | 
						-- firing arrows
 | 
				
			||||||
	if ctrl.LMB and ctrl.sneak and shoots then
 | 
						if ctrl.LMB and ctrl.sneak and shoots then
 | 
				
			||||||
@@ -434,12 +487,16 @@ function mobs.fly(entity, dtime, speed, shoots, arrow, moving_anim, stand_anim)
 | 
				
			|||||||
			z = pos.z + 0 + dir.z * 2.5}, arrow)
 | 
								z = pos.z + 0 + dir.z * 2.5}, arrow)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		local ent = obj:get_luaentity()
 | 
							local ent = obj:get_luaentity()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if ent then
 | 
							if ent then
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			ent.switch = 1 -- for mob specific arrows
 | 
								ent.switch = 1 -- for mob specific arrows
 | 
				
			||||||
			ent.owner_id = tostring(entity.object) -- so arrows dont hurt entity you are riding
 | 
								ent.owner_id = tostring(entity.object) -- so arrows dont hurt entity you are riding
 | 
				
			||||||
			local vec = {x = dir.x * 6, y = dir.y * 6, z = dir.z * 6}
 | 
								local vec = {x = dir.x * 6, y = dir.y * 6, z = dir.z * 6}
 | 
				
			||||||
			local yaw = entity.driver:get_look_horizontal()
 | 
					
 | 
				
			||||||
			obj:set_yaw(yaw + math.pi / 2)
 | 
								yaw = entity.driver:get_look_horizontal()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								obj:set_yaw(yaw + pi / 2)
 | 
				
			||||||
			obj:set_velocity(vec)
 | 
								obj:set_velocity(vec)
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
			obj:remove()
 | 
								obj:remove()
 | 
				
			||||||
@@ -448,7 +505,6 @@ function mobs.fly(entity, dtime, speed, shoots, arrow, moving_anim, stand_anim)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	-- change animation if stopped
 | 
						-- change animation if stopped
 | 
				
			||||||
	if velo.x == 0 and velo.y == 0 and velo.z == 0 then
 | 
						if velo.x == 0 and velo.y == 0 and velo.z == 0 then
 | 
				
			||||||
 | 
					 | 
				
			||||||
		mobs:set_animation(entity, stand_anim)
 | 
							mobs:set_animation(entity, stand_anim)
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		-- moving animation
 | 
							-- moving animation
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,8 +23,12 @@ Lucky Blocks: 9
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Changelog:
 | 
					Changelog:
 | 
				
			||||||
- 1.52 - Added 'mob_active_limit' in settings to set number of mobs in game 
 | 
					- 1.56 - Added arrow_override function to mob definition to tweak arrow entity settings, tamed monsters no longer despawn when outside loaded map area.
 | 
				
			||||||
(default is 0 for unlimited), removed {immortal} from mob armor
 | 
					- 1.55 - Add 'peaceful_player' privelage and setting so mobs don't attack specific players (thanks sfence), add support for MarkBu's pathfinder mod, remove need for default mod
 | 
				
			||||||
 | 
					- 1.54 - Simplified animal breeding function, added editable settings (thanks Wuzzy), Child mobs now take 20 mins to grow up, reverted to simple mob spawning with setting to use area checks, on_flop added, air_damage added.
 | 
				
			||||||
 | 
					- 1.53 - Added 'on_map_load' settings to mobs:spawn so that mobs will only spawn when new areas of map are loaded.
 | 
				
			||||||
 | 
					- 1.52 - Added 'mob_active_limit' in settings to set number of mobs in game,
 | 
				
			||||||
 | 
					(default is 0 for unlimited), removed {immortal} from mob armor, fluid viscocity slows mobs
 | 
				
			||||||
- 1.51 - Added some node checks for dangerous nodes, jumping and falling tweaks, spawn area check (thx for idea wuzzy), re-enabled mob suffocation, add 'mob_nospawn_range' setting
 | 
					- 1.51 - Added some node checks for dangerous nodes, jumping and falling tweaks, spawn area check (thx for idea wuzzy), re-enabled mob suffocation, add 'mob_nospawn_range' setting
 | 
				
			||||||
- 1.50 - Added new line_of_sight function that uses raycasting if mt5.0 is found,  (thanks Astrobe), dont spawn mobs if world anchor nearby (technic or simple_anchor mods), chinese local added
 | 
					- 1.50 - Added new line_of_sight function that uses raycasting if mt5.0 is found,  (thanks Astrobe), dont spawn mobs if world anchor nearby (technic or simple_anchor mods), chinese local added
 | 
				
			||||||
- 1.49- Added mobs:force_capture(self, player) function, api functions now use metatables thanks to bell07
 | 
					- 1.49- Added mobs:force_capture(self, player) function, api functions now use metatables thanks to bell07
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,6 +13,9 @@ mobs_griefing (Griefing Mobs) bool true
 | 
				
			|||||||
#    If false then Mobs no longer spawn inside player protected areas
 | 
					#    If false then Mobs no longer spawn inside player protected areas
 | 
				
			||||||
mobs_spawn_protected (Spawn Mobs in protected areas) bool true
 | 
					mobs_spawn_protected (Spawn Mobs in protected areas) bool true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#    If false then Monsters no longer spawn inside player protected areas
 | 
				
			||||||
 | 
					mobs_spawn_monster_protected (Spawn Monsters in protected areas) bool true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#    If true Mobs will be removed once a map chunk is out of view
 | 
					#    If true Mobs will be removed once a map chunk is out of view
 | 
				
			||||||
remove_far_mobs (Remove far Mobs) bool true
 | 
					remove_far_mobs (Remove far Mobs) bool true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -33,3 +36,12 @@ mob_nospawn_range (Mob no-spawn range) float 12.0
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#    Sets maximum number of active mobs in game (0 for unlimited)
 | 
					#    Sets maximum number of active mobs in game (0 for unlimited)
 | 
				
			||||||
mob_active_limit (Mob Active Limit) float 0
 | 
					mob_active_limit (Mob Active Limit) float 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#    Enables area check when spawning mobs
 | 
				
			||||||
 | 
					mob_area_spawn (Mob Area Spawn) bool false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#    Enable peaceful player attack prevention
 | 
				
			||||||
 | 
					enable_peaceful_player (Mobs do not attack peaceful player without reason) bool false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#    Enable mobs smooth rotation
 | 
				
			||||||
 | 
					mob_smooth_rotate (Smooth rotation for mobs) bool true
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										26
									
								
								spawner.lua
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								spawner.lua
									
									
									
									
									
								
							@@ -3,7 +3,7 @@ local S = mobs.intllib
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
-- mob spawner
 | 
					-- mob spawner
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local spawner_default = "mobs_animal:pumba 10 15 0 0"
 | 
					local spawner_default = "mobs_animal:pumba 10 15 0 0 0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_node("mobs:spawner", {
 | 
					minetest.register_node("mobs:spawner", {
 | 
				
			||||||
	tiles = {"mob_spawner.png"},
 | 
						tiles = {"mob_spawner.png"},
 | 
				
			||||||
@@ -17,10 +17,17 @@ minetest.register_node("mobs:spawner", {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		local meta = minetest.get_meta(pos)
 | 
							local meta = minetest.get_meta(pos)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							-- setup formspec
 | 
				
			||||||
 | 
							local head = S("(mob name) (min light) (max light) (amount)"
 | 
				
			||||||
 | 
									.. " (player distance) (Y offset)")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		-- text entry formspec
 | 
							-- text entry formspec
 | 
				
			||||||
		meta:set_string("formspec",
 | 
							meta:set_string("formspec",
 | 
				
			||||||
			"field[text;" .. S("Mob MinLight MaxLight Amount PlayerDist")
 | 
								"size[10,3.5]"
 | 
				
			||||||
 | 
								.. "label[0.15,0.5;" .. minetest.formspec_escape(head) .. "]"
 | 
				
			||||||
 | 
								.. "field[1,2.5;8.5,0.8;text;" .. S("Command:")
 | 
				
			||||||
			.. ";${command}]")
 | 
								.. ";${command}]")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		meta:set_string("infotext", S("Spawner Not Active (enter settings)"))
 | 
							meta:set_string("infotext", S("Spawner Not Active (enter settings)"))
 | 
				
			||||||
		meta:set_string("command", spawner_default)
 | 
							meta:set_string("command", spawner_default)
 | 
				
			||||||
	end,
 | 
						end,
 | 
				
			||||||
@@ -54,11 +61,11 @@ minetest.register_node("mobs:spawner", {
 | 
				
			|||||||
		local pla = tonumber(comm[5]) -- player distance (0 to disable)
 | 
							local pla = tonumber(comm[5]) -- player distance (0 to disable)
 | 
				
			||||||
		local yof = tonumber(comm[6]) or 0 -- Y offset to spawn mob
 | 
							local yof = tonumber(comm[6]) or 0 -- Y offset to spawn mob
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if mob and mob ~= "" and mobs.spawning_mobs[mob] == true
 | 
							if mob and mob ~= "" and mobs.spawning_mobs[mob]
 | 
				
			||||||
		and num and num >= 0 and num <= 10
 | 
							and num and num >= 0 and num <= 10
 | 
				
			||||||
		and mlig and mlig >= 0 and mlig <= 15
 | 
							and mlig and mlig >= 0 and mlig <= 15
 | 
				
			||||||
		and xlig and xlig >= 0 and xlig <= 15
 | 
							and xlig and xlig >= 0 and xlig <= 15
 | 
				
			||||||
		and pla and pla >=0 and pla <= 20
 | 
							and pla and pla >= 0 and pla <= 20
 | 
				
			||||||
		and yof and yof > -10 and yof < 10 then
 | 
							and yof and yof > -10 and yof < 10 then
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			meta:set_string("command", fields.text)
 | 
								meta:set_string("command", fields.text)
 | 
				
			||||||
@@ -67,7 +74,7 @@ minetest.register_node("mobs:spawner", {
 | 
				
			|||||||
		else
 | 
							else
 | 
				
			||||||
			minetest.chat_send_player(name, S("Mob Spawner settings failed!"))
 | 
								minetest.chat_send_player(name, S("Mob Spawner settings failed!"))
 | 
				
			||||||
			minetest.chat_send_player(name,
 | 
								minetest.chat_send_player(name,
 | 
				
			||||||
				S("Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] distance[1-20] y_offset[-10 to 10]”"))
 | 
									S("Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] player_distance[1-20] y_offset[-10 to 10]”"))
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
@@ -155,10 +162,17 @@ minetest.register_abm({
 | 
				
			|||||||
			end
 | 
								end
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							-- set medium mob usually spawns in (defaults to air)
 | 
				
			||||||
 | 
							local reg = minetest.registered_entities[mob].fly_in
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if not reg or type(reg) == "string" then
 | 
				
			||||||
 | 
								reg = {(reg or "air")}
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		-- find air blocks within 5 nodes of spawner
 | 
							-- find air blocks within 5 nodes of spawner
 | 
				
			||||||
		local air = minetest.find_nodes_in_area(
 | 
							local air = minetest.find_nodes_in_area(
 | 
				
			||||||
			{x = pos.x - 5, y = pos.y + yof, z = pos.z - 5},
 | 
								{x = pos.x - 5, y = pos.y + yof, z = pos.z - 5},
 | 
				
			||||||
			{x = pos.x + 5, y = pos.y + yof, z = pos.z + 5}, {"air"})
 | 
								{x = pos.x + 5, y = pos.y + yof, z = pos.z + 5}, reg)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		-- spawn in random air block
 | 
							-- spawn in random air block
 | 
				
			||||||
		if air and #air > 0 then
 | 
							if air and #air > 0 then
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										
											BIN
										
									
								
								textures/mobs_meat_bottom.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								textures/mobs_meat_bottom.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 253 B  | 
							
								
								
									
										
											BIN
										
									
								
								textures/mobs_meat_side.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								textures/mobs_meat_side.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 271 B  | 
							
								
								
									
										
											BIN
										
									
								
								textures/mobs_meat_top.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								textures/mobs_meat_top.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 287 B  | 
							
								
								
									
										
											BIN
										
									
								
								textures/mobs_protector2.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								textures/mobs_protector2.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 164 B  | 
		Reference in New Issue
	
	Block a user