forked from mtcontrib/mobs_redo
Compare commits
322 Commits
master
...
e545cc80f4
Author | SHA1 | Date | |
---|---|---|---|
e545cc80f4 | |||
e17f8811b1 | |||
6bf6e8fbd8 | |||
afb7e01b91 | |||
830b1698ff | |||
82411330fc | |||
2106a081b9 | |||
f1476077bd | |||
9737bde6fb | |||
082bf0cf86 | |||
607e596c05 | |||
e64df178f8 | |||
42473cbc23 | |||
77c19da8d4 | |||
dc7cdd4df0 | |||
477ad59670 | |||
da0238cb84 | |||
0482581f18 | |||
4badcec318 | |||
63c9812dad | |||
f6b5effe09 | |||
adc4e71a01 | |||
04ae3502a5 | |||
40416aa4fd | |||
e145fe098d | |||
21c52c0a87 | |||
7ed80b6a89 | |||
7b7aa45da8 | |||
e23f47922b | |||
4a5563854d | |||
c23d58f1ec | |||
12a3c8975f | |||
82c8386eb3 | |||
23f0571dee | |||
60eb37b3af | |||
33551a1441 | |||
a089d27db8 | |||
bdfce20c28 | |||
52b6a377f6 | |||
1a8f503e06 | |||
e4a2706bd6 | |||
f96852775f | |||
22cf9b880a | |||
00f46f66d5 | |||
044d8f8169 | |||
d05bf9b489 | |||
5889886f3c | |||
0849727ee9 | |||
2f1ef11fa3 | |||
2418e2af21 | |||
7bb3cd8d85 | |||
28dc0d8be5 | |||
a654a02505 | |||
2f493c07bb | |||
1bb95d742c | |||
763fbee36d | |||
d7874dce50 | |||
006f18c5c1 | |||
609d52100c | |||
2109814805 | |||
8c34c63b15 | |||
59fee9aea7 | |||
e0eae71b48 | |||
94e576c8ef | |||
f6e43fc571 | |||
fc40d8d7e0 | |||
2e9ebcced3 | |||
7d0a91936a | |||
5e238b168c | |||
331c4e96d2 | |||
4bf4d42b07 | |||
5751d98ab0 | |||
0f480942b5 | |||
07bb12acac | |||
9d653f894c | |||
93ca01de00 | |||
e5baaa5e13 | |||
a0d975510e | |||
da4ea0d5e3 | |||
cf6b529627 | |||
ec4ba73bab | |||
f6f3b58ac6 | |||
5cedfcaae2 | |||
8dd6622855 | |||
7c10fb7e27 | |||
3146b0754b | |||
2ffd942c2a | |||
27fe687f8a | |||
070f02126b | |||
65f8c2c280 | |||
8517f4d946 | |||
7c4dc07acd | |||
84672a07ce | |||
f1a30679aa | |||
6816158e87 | |||
5b7348b869 | |||
4785c37f18 | |||
7b0a1cf233 | |||
e90369ee21 | |||
80cf1ddb1c | |||
d28c410095 | |||
f19960e5db | |||
8d3e6897bc | |||
01ad44d3b3 | |||
69e2e5b5e5 | |||
38d7a214b1 | |||
4d80e58a2c | |||
ba167a3451 | |||
bc13ef7410 | |||
20d1eeec64 | |||
b95ca521ed | |||
d31010216a | |||
2312319fe3 | |||
ea4f85980d | |||
6bf601f29f | |||
3e458e1e49 | |||
83600fbba8 | |||
276c2fc0ce | |||
8ad63d35d0 | |||
c0e07d819b | |||
88e7181a02 | |||
ff13cd4e6f | |||
c6cdb74577 | |||
fc1960f5c9 | |||
7fba32b8d9 | |||
f985d00b61 | |||
8dbea868ec | |||
e4ca054be3 | |||
7b02fef7a5 | |||
7e09281760 | |||
7dc2d22ef6 | |||
1f800ff583 | |||
27390b2e36 | |||
3965b237f1 | |||
2b39c6f0fa | |||
75a2025871 | |||
f78f7c3059 | |||
bad4dcb36f | |||
9494972483 | |||
cf3a9fd679 | |||
a9178b3cb2 | |||
a964aa028d | |||
7b543fe1d7 | |||
be008cf7b7 | |||
d0475fd4f5 | |||
6799a7ac15 | |||
d74f2fa27b | |||
4ec4c38883 | |||
7dc567d2a8 | |||
8924b05623 | |||
af8963ec00 | |||
53563fe430 | |||
0d27bbe02d | |||
a58299479e | |||
54b88e25b2 | |||
60c5b5628a | |||
6f259cb047 | |||
61f7a06261 | |||
18b90da257 | |||
4eb1c937e5 | |||
ffefd49c7b | |||
f40d260a81 | |||
608a5178cf | |||
d6ff282917 | |||
ff4dfe4b4d | |||
646020db94 | |||
7de8bc4c24 | |||
e814a360f6 | |||
feb26ed940 | |||
52cf9be8eb | |||
b1c08d2261 | |||
b2083fd120 | |||
ed28e9efea | |||
e64530aa43 | |||
8ed3672fb1 | |||
13fcf68191 | |||
6aead4ec5c | |||
bbaa1ff025 | |||
e1f7453ee5 | |||
a37e38da60 | |||
374e7ac13b | |||
20f8183316 | |||
c2ecb8321e | |||
80a86b658c | |||
1205ec36a6 | |||
aa591925b1 | |||
1f0969e6d3 | |||
1fbf0ff331 | |||
c1c17a6849 | |||
36cf0693fe | |||
18d42f2285 | |||
8d8779da2f | |||
440d9874b5 | |||
59e8ba64f2 | |||
bf5d976d8e | |||
3d1f62b196 | |||
8201282022 | |||
da5e8ef635 | |||
cce6eabd81 | |||
fb850b0233 | |||
40e6eaf98a | |||
62d00489b3 | |||
6d059ef980 | |||
c7ad42b8e5 | |||
f917bf8bbe | |||
d574045930 | |||
bc86a32af6 | |||
e3515482cc | |||
4e231429d9 | |||
52a2355954 | |||
6eb6e458af | |||
2bcd528e22 | |||
26d80126f5 | |||
a33a52d140 | |||
3ba7defa3a | |||
44659da768 | |||
58317c55b2 | |||
dcae1b846a | |||
2ee53fe660 | |||
4bcfa6b802 | |||
7490006117 | |||
093285bec9 | |||
3fb24110bc | |||
ef1240d537 | |||
9f62234e42 | |||
f7798e1b29 | |||
ef3217d77f | |||
671fab54eb | |||
3ed2bd9ff6 | |||
12503180f4 | |||
d720114462 | |||
29b0f9d351 | |||
0a6fdbc3f1 | |||
dd04be9749 | |||
f9737e1f4f | |||
5fbc7dd57d | |||
b6fcc31a10 | |||
37c787d514 | |||
9990b12a12 | |||
053866c05b | |||
b71369f487 | |||
127dad97a7 | |||
c16c083d31 | |||
9d554fc31f | |||
b1048cc892 | |||
31db77bab3 | |||
62fc9bcb7f | |||
e592c18af6 | |||
954565efa2 | |||
4d37da6fe6 | |||
cbefe68049 | |||
b8d3792aa6 | |||
7014152bf9 | |||
3f61935a07 | |||
e3e00b24a0 | |||
d2806eccf2 | |||
47abff26ae | |||
444b486c5e | |||
03e96f3017 | |||
a455395a96 | |||
5df8e9054e | |||
d5822b3e0b | |||
b844712d48 | |||
5158bf3123 | |||
834bb75153 | |||
b63317bc21 | |||
046204cf9a | |||
c15ffef8ae | |||
6fea1e1b85 | |||
2aa6227f0a | |||
d99cf5f444 | |||
cfe8562c7a | |||
e2f9bbe89f | |||
4387de405e | |||
918abf2cae | |||
d011c538ee | |||
e944712c90 | |||
a470ac7cc1 | |||
542cb3d474 | |||
80ba7db8ba | |||
3362334ee1 | |||
d1bee49785 | |||
db7e02af1a | |||
093b8c9eed | |||
f8692e94e3 | |||
54beb82686 | |||
d281ad3bb1 | |||
7d77124aa0 | |||
d0fc69d458 | |||
253351ef7f | |||
bed18e114f | |||
c6d4b95768 | |||
e4a919da02 | |||
ba97620759 | |||
1a53844f61 | |||
67aa752c44 | |||
37a6399ffb | |||
3db852563c | |||
c8932731d8 | |||
050dd1dbb0 | |||
f362ced4da | |||
0e4ba14bc1 | |||
4ad941523e | |||
1dc909aa09 | |||
6e89f8f696 | |||
8fa1a0e1cb | |||
240bd3f942 | |||
b51bafcf0e | |||
b512f882e9 | |||
4d3438aeed | |||
30e1157392 | |||
a80b8dc3b0 | |||
3e05bc7ec0 | |||
58c757772f | |||
e109fefc11 | |||
604765b135 | |||
a4671719a0 | |||
4c0e2794b6 | |||
fa03f6cedb | |||
29b6fdaed9 | |||
335913f543 | |||
f76acdf724 |
3985
api.lua_testspawn
Normal file
3985
api.lua_testspawn
Normal file
File diff suppressed because it is too large
Load Diff
743
api.txt
Normal file
743
api.txt
Normal file
@ -0,0 +1,743 @@
|
|||||||
|
|
||||||
|
Mobs Redo API
|
||||||
|
=============
|
||||||
|
|
||||||
|
Welcome to the world of mobs in minetest and hopefully an easy guide to defining
|
||||||
|
your own mobs and having them appear in your worlds.
|
||||||
|
|
||||||
|
|
||||||
|
Registering Mobs
|
||||||
|
----------------
|
||||||
|
|
||||||
|
To register a mob and have it ready for use requires the following function:
|
||||||
|
|
||||||
|
mobs:register_mob(name, definition)
|
||||||
|
|
||||||
|
The 'name' of a mob usually starts with the mod name it's running from followed
|
||||||
|
by it's own name e.g.
|
||||||
|
|
||||||
|
"mobs_monster:sand_monster" or "mymod:totally_awesome_beast"
|
||||||
|
|
||||||
|
... and the 'definition' is a table which holds all of the settings and
|
||||||
|
functions needed for the mob to work properly which contains the following:
|
||||||
|
|
||||||
|
'nametag' contains the name which is shown above mob.
|
||||||
|
'type' holds the type of mob that inhabits your world e.g.
|
||||||
|
"animal" usually docile and walking around.
|
||||||
|
"monster" attacks player or npc on sight.
|
||||||
|
"npc" walk around and will defend themselves if hit first, they
|
||||||
|
kill monsters.
|
||||||
|
'hp_min' has the minimum 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
|
||||||
|
and needs more hits and better weapons to kill.
|
||||||
|
'passive' when true allows animals to defend themselves when hit,
|
||||||
|
otherwise they amble onwards.
|
||||||
|
'walk_velocity' is the speed that your mob can walk around.
|
||||||
|
'run_velocity' is the speed your mob can run with, usually when attacking.
|
||||||
|
'walk_chance' has a 0-100 chance value your mob will walk from standing,
|
||||||
|
set to 0 for jumping mobs only.
|
||||||
|
'jump' when true allows your mob to jump updwards.
|
||||||
|
'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,
|
||||||
|
defaults to 1.1.
|
||||||
|
'fly' when true allows your mob to fly around instead of walking.
|
||||||
|
'fly_in' holds the node name that the mob flies (or swims) around
|
||||||
|
in e.g. "air" or "default:water_source".
|
||||||
|
'runaway' if true causes animals to turn and run away when hit.
|
||||||
|
'pushable' when true mobs can be pushed by player or other mobs.
|
||||||
|
'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
|
||||||
|
mob when melee attacking.
|
||||||
|
'knock_back' when true has mobs falling backwards when hit, the greater
|
||||||
|
the damage the more they move back.
|
||||||
|
'fear_height' is how high a cliff or edge has to be before the mob stops
|
||||||
|
walking, 0 to turn off height fear.
|
||||||
|
'fall_speed' has the maximum speed the mob can fall at, default is -10.
|
||||||
|
'fall_damage' when true causes falling to inflict damage.
|
||||||
|
'water_damage' holds the damage per second infliced to mobs when standing in
|
||||||
|
water.
|
||||||
|
'lava_damage' holds the damage per second inflicted to mobs when standing
|
||||||
|
in lava or fire or an ignition source.
|
||||||
|
'light_damage' holds the damage per second inflicted to mobs when light
|
||||||
|
level is between the min and max values below
|
||||||
|
'light_damage_min' minimum light value when mob is affected (default: 14)
|
||||||
|
'light_damage_max' maximum light value when mob is affected (default: 15)
|
||||||
|
'suffocation' when true causes mobs to suffocate inside solid blocks.
|
||||||
|
'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
|
||||||
|
on this table, the same items can be fed to a mob to tame or
|
||||||
|
breed e.g. {"farming:wheat", "default:apple"}
|
||||||
|
|
||||||
|
'reach' is how far the mob can attack player when standing
|
||||||
|
nearby, default is 3 nodes.
|
||||||
|
'docile_by_day' when true has mobs wandering around during daylight
|
||||||
|
hours and only attacking player at night or when
|
||||||
|
provoked.
|
||||||
|
'attack_chance' 0 to 100 chance the mob will attack (default is 5).
|
||||||
|
'attack_monsters' when true mob will attack monsters.
|
||||||
|
'attack_animals' when true mob will attack animals.
|
||||||
|
'attack_npcs' when true mob will attack npcs within range.
|
||||||
|
'attack_players' when true mob will attack players nearby.
|
||||||
|
'owner_loyal' when true non-docile tamed mobs attack anything player
|
||||||
|
punches when nearby.
|
||||||
|
'group_attack' when true has same mob type grouping together to attack
|
||||||
|
offender.
|
||||||
|
'attack_type' tells the api what a mob does when attacking the player
|
||||||
|
or another mob:
|
||||||
|
'dogfight' is a melee attack when player is within mob reach.
|
||||||
|
'shoot' has mob shoot pre-defined arrows at player when inside
|
||||||
|
view_range.
|
||||||
|
'dogshoot' has melee attack when inside reach and shoot attack
|
||||||
|
when inside view_range.
|
||||||
|
'explode' causes mob to stop and explode when inside reach.
|
||||||
|
'explosion_radius' the radius of explosion node destruction,
|
||||||
|
defaults to 1
|
||||||
|
'explosion_damage_radius' the radius of explosion entity & player damage,
|
||||||
|
defaults to explosion_radius * 2
|
||||||
|
'explosion_timer' number of seconds before mob explodes while its target
|
||||||
|
is still inside reach or explosion_damage_radius,
|
||||||
|
defaults to 3.
|
||||||
|
'allow_fuse_reset' Allow 'explode' attack_type to reset fuse and resume
|
||||||
|
chasing if target leaves the blast radius or line of
|
||||||
|
sight. Defaults to true.
|
||||||
|
'stop_to_explode' When set to true (default), mob must stop and wait for
|
||||||
|
explosion_timer in order to explode. If false, mob will
|
||||||
|
continue chasing.
|
||||||
|
'arrow' holds the pre-defined arrow object to shoot when
|
||||||
|
attacking.
|
||||||
|
'dogshoot_switch' allows switching between attack types by using timers
|
||||||
|
(1 for shoot, 2 for dogfight)
|
||||||
|
'dogshoot_count_max' contains how many seconds before switching from
|
||||||
|
dogfight to shoot.
|
||||||
|
'dogshoot_count2_max' contains how many seconds before switching from shoot
|
||||||
|
to dogfight.
|
||||||
|
'shoot_interval' has the number of seconds between shots.
|
||||||
|
'shoot_offset' holds the y position added as to where the
|
||||||
|
arrow/fireball appears on mob.
|
||||||
|
'specific_attack' has a table of entity names that mob can also attack
|
||||||
|
e.g. {"player", "mobs_animal:chicken"}.
|
||||||
|
'runaway_from' contains a table with mob names to run away from, add
|
||||||
|
"player" to list to runaway from player also.
|
||||||
|
'blood_amount' contains the number of blood droplets to appear when
|
||||||
|
mob is hit.
|
||||||
|
'blood_texture' has the texture name to use for droplets e.g.
|
||||||
|
"mobs_blood.png", or table {"blood1.png", "blood2.png"}
|
||||||
|
'pathfinding' set to 1 for mobs to use pathfinder feature to locate
|
||||||
|
player, set to 2 so they can build/break also (only
|
||||||
|
works with dogfight attack and when 'mobs_griefing'
|
||||||
|
in minetest.conf is not false).
|
||||||
|
'immune_to' is a table that holds specific damage when being hit by
|
||||||
|
certain items e.g.
|
||||||
|
{"default:sword_wood", 0} -- causes no damage.
|
||||||
|
{"default:gold_lump", -10} -- heals by 10 health points.
|
||||||
|
{"default:coal_block", 20} -- 20 damage when hit on head with coal blocks.
|
||||||
|
{"all"} -- stops all weapons causing damage apart from those on list.
|
||||||
|
|
||||||
|
'makes_footstep_sound' when true you can hear mobs walking.
|
||||||
|
'sounds' this is a table with sounds of the mob
|
||||||
|
'distance' maximum distance sounds can be heard, default is 10.
|
||||||
|
'random' random sound that plays during gameplay.
|
||||||
|
'war_cry' what you hear when mob starts to attack player.
|
||||||
|
'attack' what you hear when being attacked.
|
||||||
|
'shoot_attack' sound played when mob shoots.
|
||||||
|
'damage' sound heard when mob is hurt.
|
||||||
|
'death' played when mob is killed.
|
||||||
|
'jump' played when mob jumps.
|
||||||
|
'fuse' sound played when mob explode timer starts.
|
||||||
|
'explode' sound played when mob explodes.
|
||||||
|
|
||||||
|
'drops' table of items that are dropped when mob is killed, fields are:
|
||||||
|
'name' name of item to drop.
|
||||||
|
'chance' chance of drop, 1 for always, 2 for 1-in-2 chance etc.
|
||||||
|
'min' minimum number of items dropped, set to 0 for rare drops.
|
||||||
|
'max' maximum number of items dropped.
|
||||||
|
Note: If weapon has {fire=1} damage group set then cooked items will drop.
|
||||||
|
|
||||||
|
'visual' holds the look of the mob you wish to create:
|
||||||
|
'cube' looks like a normal node
|
||||||
|
'sprite' sprite which looks same from all angles.
|
||||||
|
'upright_sprite' flat model standing upright.
|
||||||
|
'wielditem' how it looks when player holds it in hand.
|
||||||
|
'mesh' uses separate object file to define mob.
|
||||||
|
'visual_size' has the size of the mob, defaults to {x = 1, y = 1}
|
||||||
|
'collisionbox' has the box in which mob can be interacted with the
|
||||||
|
world e.g. {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}
|
||||||
|
'selectionbox' has the box in which player can interact with mob
|
||||||
|
'textures' holds a table list of textures to be used for mob, or you
|
||||||
|
could use multiple lists inside another table for random
|
||||||
|
selection e.g. { {"texture1.png"}, {"texture2.png"} }
|
||||||
|
'child_texture' holds the texture table for when baby mobs are used.
|
||||||
|
'gotten_texture' holds the texture table for when self.gotten value is
|
||||||
|
true, used for milking cows or shearing sheep.
|
||||||
|
'mesh' holds the name of the external object used for mob model
|
||||||
|
e.g. "mobs_cow.b3d"
|
||||||
|
'gotten_mesh" holds the name of the external object used for when
|
||||||
|
self.gotten is true for mobs.
|
||||||
|
'rotate' custom model rotation, 0 = front, 90 = side, 180 = back,
|
||||||
|
270 = other side.
|
||||||
|
'double_melee_attack' when true has the api choose between 'punch' and
|
||||||
|
'punch2' animations. [DEPRECATED]
|
||||||
|
|
||||||
|
'animation' holds a table containing animation names and settings for use with mesh models:
|
||||||
|
'stand_start' start frame for when mob stands still.
|
||||||
|
'stand_end' end frame of stand animation.
|
||||||
|
'stand_speed' speed of animation in frames per second.
|
||||||
|
'walk_start' when mob is walking around.
|
||||||
|
'walk_end'
|
||||||
|
'walk_speed'
|
||||||
|
'run_start' when a mob runs or attacks.
|
||||||
|
'run_end'
|
||||||
|
'run_speed'
|
||||||
|
'fly_start' when a mob is flying.
|
||||||
|
'fly_end'
|
||||||
|
'fly_speed'
|
||||||
|
'punch_start' when a mob melee attacks.
|
||||||
|
'punch_end'
|
||||||
|
'punch_speed'
|
||||||
|
'punch2_start' alternative melee attack animation.
|
||||||
|
'punch2_end'
|
||||||
|
'punch2_speed'
|
||||||
|
'shoot_start' shooting animation.
|
||||||
|
'shoot_end'
|
||||||
|
'shoot_speed'
|
||||||
|
'die_start' death animation
|
||||||
|
'die_end'
|
||||||
|
'die_speed'
|
||||||
|
'die_loop' when set to false stops the animation looping.
|
||||||
|
|
||||||
|
Using '_loop = false' setting will stop any of the above animations from
|
||||||
|
looping.
|
||||||
|
|
||||||
|
'speed_normal' is used for animation speed for compatibility with some
|
||||||
|
older mobs.
|
||||||
|
|
||||||
|
Note: Up to 5 different animations can be used per action e.g.
|
||||||
|
stand_start, stand_end, stand1_start, stand1_end .. up to stand4_start
|
||||||
|
|
||||||
|
|
||||||
|
Node Replacement
|
||||||
|
----------------
|
||||||
|
|
||||||
|
Mobs can look around for specific nodes as they walk and replace them to mimic
|
||||||
|
eating.
|
||||||
|
|
||||||
|
'replace_what' group of items to replace e.g.
|
||||||
|
{"farming:wheat_8", "farming:carrot_8"}
|
||||||
|
or you can use the specific options of what, with and
|
||||||
|
y offset by using this instead:
|
||||||
|
{
|
||||||
|
{"group:grass", "air", 0},
|
||||||
|
{"default:dirt_with_grass", "default:dirt", -1}
|
||||||
|
}
|
||||||
|
'replace_with' replace with what e.g. "air" or in chickens case "mobs:egg"
|
||||||
|
'replace_rate' how random should the replace rate be (typically 10)
|
||||||
|
'replace_offset' +/- value to check specific node to replace
|
||||||
|
|
||||||
|
'on_replace(self, pos, oldnode, newnode)' is called when mob is about to
|
||||||
|
replace a node.
|
||||||
|
'self' ObjectRef of mob
|
||||||
|
'pos' Position of node to replace
|
||||||
|
'oldnode' Current node
|
||||||
|
'newnode' What the node will become after replacing
|
||||||
|
|
||||||
|
If false is returned, the mob will not replace the node.
|
||||||
|
|
||||||
|
By default, replacing sets self.gotten to true and resets the object
|
||||||
|
properties.
|
||||||
|
|
||||||
|
|
||||||
|
Custom Definition Functions
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
Along with the above mob registry settings we can also use custom functions to
|
||||||
|
enhance mob functionality and have them do many interesting things:
|
||||||
|
|
||||||
|
'on_die' a function that is called when the mob is killed the
|
||||||
|
parameters are (self, pos)
|
||||||
|
'on_rightclick' its same as in minetest.register_entity()
|
||||||
|
'on_blast' is called when an explosion happens near mob when using TNT
|
||||||
|
functions, parameters are (object, damage) and returns
|
||||||
|
(do_damage, do_knockback, drops)
|
||||||
|
'on_spawn' is a custom function that runs on mob spawn with 'self' as
|
||||||
|
variable, return true at end of function to run only once.
|
||||||
|
'after_activate' is a custom function that runs once mob has been activated
|
||||||
|
with these paramaters (self, staticdata, def, dtime)
|
||||||
|
'on_breed' called when two similar mobs breed, paramaters are
|
||||||
|
(parent1, parent2) objects, return false to stop child from
|
||||||
|
being resized and owner/tamed flags and child textures being
|
||||||
|
applied. Function itself must spawn new child mob.
|
||||||
|
'on_grown' is called when a child mob has grown up, only paramater is
|
||||||
|
(self).
|
||||||
|
'do_punch' called when mob is punched with paramaters (self, hitter,
|
||||||
|
time_from_last_punch, tool_capabilities, direction), return
|
||||||
|
false to stop punch damage and knockback from taking place.
|
||||||
|
'custom_attack' when set this function is called instead of the normal mob
|
||||||
|
melee attack, parameters are (self, to_attack).
|
||||||
|
'on_die' a function that is called when mob is killed (self, pos)
|
||||||
|
'do_custom' a custom function that is called every tick while mob is
|
||||||
|
active and which has access to all of the self.* variables
|
||||||
|
e.g. (self.health for health or self.standing_in for node
|
||||||
|
status), return with 'false' to skip remainder of mob API.
|
||||||
|
|
||||||
|
|
||||||
|
Internal Variables
|
||||||
|
------------------
|
||||||
|
|
||||||
|
The mob api also has some preset variables and functions that it will remember
|
||||||
|
for each mob.
|
||||||
|
|
||||||
|
'self.health' contains current health of mob (cannot exceed
|
||||||
|
self.hp_max)
|
||||||
|
'self.texture_list' contains list of all mob textures
|
||||||
|
'self.child_texture' contains mob child texture when growing up
|
||||||
|
'self.base_texture' contains current skin texture which was randomly
|
||||||
|
selected from textures list
|
||||||
|
'self.gotten' this is used for obtaining milk from cow and wool from
|
||||||
|
sheep
|
||||||
|
'self.horny' when animal fed enough it is set to true and animal can
|
||||||
|
breed with same animal
|
||||||
|
'self.hornytimer' background timer that controls breeding functions and
|
||||||
|
mob childhood timings
|
||||||
|
'self.child' used for when breeding animals have child, will use
|
||||||
|
child_texture and be half size
|
||||||
|
'self.owner' string used to set owner of npc mobs, typically used for
|
||||||
|
dogs
|
||||||
|
'self.order' set to "follow" or "stand" so that npc will follow owner
|
||||||
|
or stand it's ground
|
||||||
|
'self.nametag' contains the name of the mob which it can show above
|
||||||
|
|
||||||
|
|
||||||
|
Spawning Mobs in World
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
mobs:register_spawn(name, nodes, max_light, min_light, chance,
|
||||||
|
active_object_count, max_height, day_toggle)
|
||||||
|
|
||||||
|
mobs:spawn_specfic(name, nodes, neighbors, min_light, max_light, interval,
|
||||||
|
chance, active_object_count, min_height, max_height, day_toggle, on_spawn)
|
||||||
|
|
||||||
|
These functions register a spawn algorithm for the mob. Without this function
|
||||||
|
the call the mobs won't spawn.
|
||||||
|
|
||||||
|
'name' is the name of the animal/monster
|
||||||
|
'nodes' is a list of nodenames on that the animal/monster can
|
||||||
|
spawn on top of
|
||||||
|
'neighbors' is a list of nodenames on that the animal/monster will
|
||||||
|
spawn beside (default is {"air"} for
|
||||||
|
mobs:register_spawn)
|
||||||
|
'max_light' is the maximum of light
|
||||||
|
'min_light' is the minimum of light
|
||||||
|
'interval' is same as in register_abm() (default is 30 for
|
||||||
|
mobs:register_spawn)
|
||||||
|
'chance' is same as in register_abm()
|
||||||
|
'active_object_count' number of this type of mob to spawn at one time inside
|
||||||
|
map area
|
||||||
|
'min_height' is the minimum height the mob can spawn
|
||||||
|
'max_height' is the maximum height the mob can spawn
|
||||||
|
'day_toggle' true for day spawning, false for night or nil for
|
||||||
|
anytime
|
||||||
|
'on_spawn' is a custom function which runs after mob has spawned
|
||||||
|
and gives self and pos values.
|
||||||
|
|
||||||
|
A simpler way to handle mob spawns has been added with the mobs:spawn(def)
|
||||||
|
command which uses above names to make settings clearer:
|
||||||
|
|
||||||
|
mobs:spawn({name = "mobs_monster:tree_monster",
|
||||||
|
nodes = {"group:leaves"},
|
||||||
|
max_light = 7,
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
For each mob that spawns with this function is a field in mobs.spawning_mobs.
|
||||||
|
It tells if the mob should spawn or not. Default is true. So other mods can
|
||||||
|
only use the API of this mod by disabling the spawning of the default mobs in
|
||||||
|
this mod.
|
||||||
|
|
||||||
|
|
||||||
|
mobs:spawn_abm_check(pos, node, name)
|
||||||
|
|
||||||
|
This global function can be changed to contain additional checks for mobs to
|
||||||
|
spawn e.g. mobs that spawn only in specific areas and the like. By returning
|
||||||
|
true the mob will not spawn.
|
||||||
|
|
||||||
|
'pos' holds the position of the spawning mob
|
||||||
|
'node' contains the node the mob is spawning on top of
|
||||||
|
'name' is the name of the animal/monster
|
||||||
|
|
||||||
|
|
||||||
|
Making Arrows
|
||||||
|
-------------
|
||||||
|
|
||||||
|
mobs:register_arrow(name, definition)
|
||||||
|
|
||||||
|
This function registers a arrow for mobs with the attack type shoot.
|
||||||
|
|
||||||
|
'name' is the name of the arrow
|
||||||
|
'definition' is a table with the following values:
|
||||||
|
'visual' same is in minetest.register_entity()
|
||||||
|
'visual_size' same is in minetest.register_entity()
|
||||||
|
'textures' same is in minetest.register_entity()
|
||||||
|
'velocity' the velocity of the arrow
|
||||||
|
'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;
|
||||||
|
this function should hurt the player, the parameters are
|
||||||
|
(self, player)
|
||||||
|
'hit_mob' a function that is called when the arrow hits a mob;
|
||||||
|
this function should hurt the mob, the parameters are
|
||||||
|
(self, player)
|
||||||
|
'hit_node' a function that is called when the arrow hits a node, the
|
||||||
|
parameters are (self, pos, node)
|
||||||
|
'tail' when set to 1 adds a trail or tail to mob arrows
|
||||||
|
'tail_texture' texture string used for above effect
|
||||||
|
'tail_size' has size for above texture (defaults to between 5 and 10)
|
||||||
|
'expire' contains float value for how long tail appears for
|
||||||
|
(defaults to 0.25)
|
||||||
|
'glow' has value for how brightly tail glows 1 to 10 (default is
|
||||||
|
0 for no glow)
|
||||||
|
'rotate' integer value in degrees to rotate arrow
|
||||||
|
'on_step' is a custom function when arrow is active, nil for
|
||||||
|
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.
|
||||||
|
|
||||||
|
|
||||||
|
Spawn Eggs
|
||||||
|
----------
|
||||||
|
|
||||||
|
mobs:register_egg(name, description, background, addegg, no_creative)
|
||||||
|
|
||||||
|
This function registers a spawn egg which can be used by admin to properly spawn in a mob.
|
||||||
|
|
||||||
|
'name' this is the name of your new mob to spawn e.g. "mob:sheep"
|
||||||
|
'description' the name of the new egg you are creating e.g. "Spawn Sheep"
|
||||||
|
'background' the texture displayed for the egg in inventory
|
||||||
|
'addegg' would you like an egg image in front of your texture (1 = yes,
|
||||||
|
0 = no)
|
||||||
|
'no_creative' when set to true this stops spawn egg appearing in creative
|
||||||
|
mode for destructive mobs like Dungeon Masters.
|
||||||
|
|
||||||
|
|
||||||
|
Explosion Function
|
||||||
|
------------------
|
||||||
|
|
||||||
|
mobs:explosion(pos, radius) -- DEPRECATED!!! use mobs:boom() instead
|
||||||
|
|
||||||
|
mobs:boom(self, pos, radius)
|
||||||
|
'self' mob entity
|
||||||
|
'pos' centre position of explosion
|
||||||
|
'radius' radius of explosion (typically set to 3)
|
||||||
|
|
||||||
|
This function generates an explosion which removes nodes in a specific radius
|
||||||
|
and damages any entity caught inside the blast radius. Protection will limit
|
||||||
|
node destruction but not entity damage.
|
||||||
|
|
||||||
|
|
||||||
|
Capturing Mobs
|
||||||
|
--------------
|
||||||
|
|
||||||
|
mobs:capture_mob(self, clicker, chance_hand, chance_net, chance_lasso,
|
||||||
|
force_take, replacewith)
|
||||||
|
|
||||||
|
This function is generally called inside the on_rightclick section of the mob
|
||||||
|
api code, it provides a chance of capturing the mob by hand, using the net or
|
||||||
|
lasso items, and can also have the player take the mob by force if tamed and
|
||||||
|
replace with another item entirely.
|
||||||
|
|
||||||
|
'self' mob information
|
||||||
|
'clicker' player information
|
||||||
|
'chance_hand' chance of capturing mob by hand (1 to 100) 0 to disable
|
||||||
|
'chance_net' chance of capturing mob using net (1 to 100) 0 to disable
|
||||||
|
'chance_lasso' chance of capturing mob using magic lasso (1 to 100) 0 to
|
||||||
|
disable
|
||||||
|
'force_take' take mob by force, even if tamed (true or false)
|
||||||
|
'replacewith' once captured replace mob with this item instead (overrides
|
||||||
|
new mob eggs with saved information)
|
||||||
|
|
||||||
|
|
||||||
|
Feeding and Taming/Breeding
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
mobs:feed_tame(self, clicker, feed_count, breed, tame)
|
||||||
|
|
||||||
|
This function allows the mob to be fed the item inside self.follow be it apple,
|
||||||
|
wheat or whatever a set number of times and be tamed or bred as a result.
|
||||||
|
Will return true when mob is fed with item it likes.
|
||||||
|
|
||||||
|
'self' mob information
|
||||||
|
'clicker' player information
|
||||||
|
'feed_count' number of times mob must be fed to tame or breed
|
||||||
|
'breed' true or false stating if mob can be bred and a child created
|
||||||
|
afterwards
|
||||||
|
'tame' true or false stating if mob can be tamed so player can pick
|
||||||
|
them up
|
||||||
|
|
||||||
|
|
||||||
|
Protecting Mobs
|
||||||
|
---------------
|
||||||
|
|
||||||
|
mobs:protect(self, clicker)
|
||||||
|
|
||||||
|
This function can be used to right-click any tamed mob with mobs:protector item,
|
||||||
|
this will protect the mob from harm inside of a protected area from other
|
||||||
|
players. Will return true when mob right-clicked with mobs:protector item.
|
||||||
|
|
||||||
|
'self' mob information
|
||||||
|
'clicker' player information
|
||||||
|
|
||||||
|
|
||||||
|
Riding Mobs
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Mobs can now be ridden by players and the following shows its functions and
|
||||||
|
usage:
|
||||||
|
|
||||||
|
|
||||||
|
mobs:attach(self, player)
|
||||||
|
|
||||||
|
This function attaches a player to the mob so it can be ridden.
|
||||||
|
|
||||||
|
'self' mob information
|
||||||
|
'player' player information
|
||||||
|
|
||||||
|
|
||||||
|
mobs:detach(player, offset)
|
||||||
|
|
||||||
|
This function will detach the player currently riding a mob to an offset
|
||||||
|
position.
|
||||||
|
|
||||||
|
'player' player information
|
||||||
|
'offset' position table containing offset values
|
||||||
|
|
||||||
|
|
||||||
|
mobs:drive(self, move_animation, stand_animation, can_fly, dtime)
|
||||||
|
|
||||||
|
This function allows an attached player to move the mob around and animate it at
|
||||||
|
same time.
|
||||||
|
|
||||||
|
'self' mob information
|
||||||
|
'move_animation' string containing movement animation e.g. "walk"
|
||||||
|
'stand_animation' string containing standing animation e.g. "stand"
|
||||||
|
'can_fly' if true then jump and sneak controls will allow mob to fly
|
||||||
|
up and down
|
||||||
|
'dtime' tick time used inside drive function
|
||||||
|
|
||||||
|
|
||||||
|
mobs:fly(self, dtime, speed, can_shoot, arrow_entity, move_animation, stand_animation)
|
||||||
|
|
||||||
|
This function allows an attached player to fly the mob around using directional
|
||||||
|
controls.
|
||||||
|
|
||||||
|
'self' mob information
|
||||||
|
'dtime' tick time used inside fly function
|
||||||
|
'speed' speed of flight
|
||||||
|
'can_shoot' true if mob can fire arrow (sneak and left mouse button
|
||||||
|
fires)
|
||||||
|
'arrow_entity' name of arrow entity used for firing
|
||||||
|
'move_animation' string containing name of pre-defined animation e.g. "walk"
|
||||||
|
or "fly" etc.
|
||||||
|
'stand_animation' string containing name of pre-defined animation e.g.
|
||||||
|
"stand" or "blink" etc.
|
||||||
|
|
||||||
|
Note: animation names above are from the pre-defined animation lists inside mob
|
||||||
|
registry without extensions.
|
||||||
|
|
||||||
|
|
||||||
|
mobs:set_animation(self, name)
|
||||||
|
|
||||||
|
This function sets the current animation for mob, defaulting to "stand" if not
|
||||||
|
found.
|
||||||
|
|
||||||
|
'self' mob information
|
||||||
|
'name' name of animation
|
||||||
|
|
||||||
|
|
||||||
|
Certain variables need to be set before using the above functions:
|
||||||
|
|
||||||
|
'self.v2' toggle switch used to define below values for the
|
||||||
|
first time
|
||||||
|
'self.max_speed_forward' max speed mob can move forward
|
||||||
|
'self.max_speed_reverse' max speed mob can move backwards
|
||||||
|
'self.accel' acceleration speed
|
||||||
|
'self.terrain_type' integer containing terrain mob can walk on
|
||||||
|
(1 = water, 2 or 3 = land)
|
||||||
|
'self.driver_attach_at' position offset for attaching player to mob
|
||||||
|
'self.driver_eye_offset' position offset for attached player view
|
||||||
|
'self.driver_scale' sets driver scale for mobs larger than {x=1, y=1}
|
||||||
|
|
||||||
|
|
||||||
|
mobs:line_of_sight(self, pos1, pos2, stepsize)
|
||||||
|
|
||||||
|
This function is for use within the mobs definition for special use cases and
|
||||||
|
returns true if a mob can see the player or victim.
|
||||||
|
|
||||||
|
...'self' mob information
|
||||||
|
'pos1' position of mob
|
||||||
|
'pos2' position of vistim or player
|
||||||
|
'stepsize' usually set to 1
|
||||||
|
|
||||||
|
|
||||||
|
External Settings for "minetest.conf"
|
||||||
|
------------------------------------
|
||||||
|
|
||||||
|
'enable_damage' if true monsters will attack players (default is true)
|
||||||
|
'only_peaceful_mobs' if true only animals will spawn in game (default is
|
||||||
|
false)
|
||||||
|
'mobs_disable_blood' if false blood effects appear when mob is hit (default
|
||||||
|
is false)
|
||||||
|
'mobs_spawn_protected' if set to false then mobs will not spawn in protected
|
||||||
|
areas (default is true)
|
||||||
|
'remove_far_mobs' if true then untamed mobs that are outside players
|
||||||
|
visual range will be removed (default is true)
|
||||||
|
'mobname' can change specific mob chance rate (0 to disable) and
|
||||||
|
spawn number e.g. mobs_animal:cow = 1000,5
|
||||||
|
'mob_difficulty' sets difficulty level (health and hit damage
|
||||||
|
multiplied by this number), defaults to 1.0.
|
||||||
|
'mob_show_health' if false then punching mob will not show health status
|
||||||
|
(true by default)
|
||||||
|
'mob_chance_multiplier' multiplies chance of all mobs spawning and can be set
|
||||||
|
to 0.5 to have mobs spawn more or 2.0 to spawn less.
|
||||||
|
e.g. 1 in 7000 * 0.5 = 1 in 3500 so better odds of
|
||||||
|
spawning.
|
||||||
|
'mobs_spawn' if false then mobs no longer spawn without spawner or
|
||||||
|
spawn egg.
|
||||||
|
'mobs_drop_items' when false mobs no longer drop items when they die.
|
||||||
|
'mobs_griefing' when false mobs cannot break blocks when using either
|
||||||
|
pathfinding level 2, replace functions or mobs:boom
|
||||||
|
function.
|
||||||
|
|
||||||
|
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
|
||||||
|
mob will spawn e.g.
|
||||||
|
|
||||||
|
mobs_animal:sheep_chance 11000
|
||||||
|
mobs_monster:sand_monster_chance 100
|
||||||
|
|
||||||
|
|
||||||
|
Rideable Horse Example Mob
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
mobs:register_mob("mob_horse:horse", {
|
||||||
|
type = "animal",
|
||||||
|
visual = "mesh",
|
||||||
|
visual_size = {x = 1.20, y = 1.20},
|
||||||
|
mesh = "mobs_horse.x",
|
||||||
|
collisionbox = {-0.4, -0.01, -0.4, 0.4, 1.25, 0.4},
|
||||||
|
animation = {
|
||||||
|
speed_normal = 15,
|
||||||
|
speed_run = 30,
|
||||||
|
stand_start = 25,
|
||||||
|
stand_end = 75,
|
||||||
|
walk_start = 75,
|
||||||
|
walk_end = 100,
|
||||||
|
run_start = 75,
|
||||||
|
run_end = 100,
|
||||||
|
},
|
||||||
|
textures = {
|
||||||
|
{"mobs_horse.png"},
|
||||||
|
{"mobs_horsepeg.png"},
|
||||||
|
{"mobs_horseara.png"}
|
||||||
|
},
|
||||||
|
fear_height = 3,
|
||||||
|
runaway = true,
|
||||||
|
fly = false,
|
||||||
|
walk_chance = 60,
|
||||||
|
view_range = 5,
|
||||||
|
follow = {"farming:wheat"},
|
||||||
|
passive = true,
|
||||||
|
hp_min = 12,
|
||||||
|
hp_max = 16,
|
||||||
|
armor = 200,
|
||||||
|
lava_damage = 5,
|
||||||
|
fall_damage = 5,
|
||||||
|
water_damage = 1,
|
||||||
|
makes_footstep_sound = true,
|
||||||
|
drops = {
|
||||||
|
{name = "mobs:meat_raw", chance = 1, min = 2, max = 3}
|
||||||
|
},
|
||||||
|
sounds = {
|
||||||
|
random = "horse_neigh.ogg",
|
||||||
|
damage = "horse_whinney.ogg",
|
||||||
|
},
|
||||||
|
|
||||||
|
do_custom = function(self, dtime)
|
||||||
|
|
||||||
|
-- set needed values if not already present
|
||||||
|
if not self.v2 then
|
||||||
|
self.v2 = 0
|
||||||
|
self.max_speed_forward = 6
|
||||||
|
self.max_speed_reverse = 2
|
||||||
|
self.accel = 6
|
||||||
|
self.terrain_type = 3
|
||||||
|
self.driver_attach_at = {x = 0, y = 20, z = -2}
|
||||||
|
self.driver_eye_offset = {x = 0, y = 3, z = 0}
|
||||||
|
self.driver_scale = {x = 1, y = 1}
|
||||||
|
end
|
||||||
|
|
||||||
|
-- if driver present allow control of horse
|
||||||
|
if self.driver then
|
||||||
|
|
||||||
|
mobs.drive(self, "walk", "stand", false, dtime)
|
||||||
|
|
||||||
|
return false -- skip rest of mob functions
|
||||||
|
end
|
||||||
|
|
||||||
|
return true
|
||||||
|
end,
|
||||||
|
|
||||||
|
on_die = function(self, pos)
|
||||||
|
|
||||||
|
-- drop saddle when horse is killed while riding
|
||||||
|
-- also detach from horse properly
|
||||||
|
if self.driver then
|
||||||
|
minetest.add_item(pos, "mobs:saddle")
|
||||||
|
mobs.detach(self.driver, {x = 1, y = 0, z = 1})
|
||||||
|
end
|
||||||
|
|
||||||
|
end,
|
||||||
|
|
||||||
|
on_rightclick = function(self, clicker)
|
||||||
|
|
||||||
|
-- make sure player is clicking
|
||||||
|
if not clicker or not clicker:is_player() then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- feed, tame or heal horse
|
||||||
|
if mobs:feed_tame(self, clicker, 10, true, true) then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- make sure tamed horse is being clicked by owner only
|
||||||
|
if self.tamed and self.owner == clicker:get_player_name() then
|
||||||
|
|
||||||
|
local inv = clicker:get_inventory()
|
||||||
|
|
||||||
|
-- detatch player already riding horse
|
||||||
|
if self.driver and clicker == self.driver then
|
||||||
|
|
||||||
|
mobs.detach(clicker, {x = 1, y = 0, z = 1})
|
||||||
|
|
||||||
|
-- add saddle back to inventory
|
||||||
|
if inv:room_for_item("main", "mobs:saddle") then
|
||||||
|
inv:add_item("main", "mobs:saddle")
|
||||||
|
else
|
||||||
|
minetest.add_item(clicker.getpos(), "mobs:saddle")
|
||||||
|
end
|
||||||
|
|
||||||
|
-- attach player to horse
|
||||||
|
elseif not self.driver
|
||||||
|
and clicker:get_wielded_item():get_name() == "mobs:saddle" then
|
||||||
|
|
||||||
|
self.object:set_properties({stepheight = 1.1})
|
||||||
|
mobs.attach(self, clicker)
|
||||||
|
|
||||||
|
-- take saddle from inventory
|
||||||
|
inv:remove_item("main", "mobs:saddle")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- used to capture horse with magic lasso
|
||||||
|
mobs:capture_mob(self, clicker, 0, 0, 80, false, nil)
|
||||||
|
end
|
||||||
|
})
|
172
crafts.lua
172
crafts.lua
@ -1,34 +1,42 @@
|
|||||||
|
|
||||||
|
local S = mobs.intllib
|
||||||
|
|
||||||
-- name tag
|
-- name tag
|
||||||
minetest.register_craftitem("mobs:nametag", {
|
minetest.register_craftitem("mobs:nametag", {
|
||||||
description = "Nametag",
|
description = S("Name Tag"),
|
||||||
inventory_image = "mobs_nametag.png",
|
inventory_image = "mobs_nametag.png",
|
||||||
|
groups = {flammable = 2},
|
||||||
})
|
})
|
||||||
|
|
||||||
core.register_craft({
|
if minetest.get_modpath("dye") and minetest.get_modpath("farming") then
|
||||||
|
minetest.register_craft({
|
||||||
type = "shapeless",
|
type = "shapeless",
|
||||||
output = "mobs:nametag",
|
output = "mobs:nametag",
|
||||||
recipe = {"default:paper", "dye:black", "farming:string"},
|
recipe = {"default:paper", "dye:black", "farming:string"},
|
||||||
})
|
})
|
||||||
|
end
|
||||||
|
|
||||||
-- leather
|
-- leather
|
||||||
minetest.register_craftitem("mobs:leather", {
|
minetest.register_craftitem("mobs:leather", {
|
||||||
description = "Leather",
|
description = S("Leather"),
|
||||||
inventory_image = "mobs_leather.png",
|
inventory_image = "mobs_leather.png",
|
||||||
|
groups = {flammable = 2},
|
||||||
})
|
})
|
||||||
|
|
||||||
-- raw meat
|
-- raw meat
|
||||||
minetest.register_craftitem("mobs:meat_raw", {
|
minetest.register_craftitem("mobs:meat_raw", {
|
||||||
description = "Raw Meat",
|
description = S("Raw Meat"),
|
||||||
inventory_image = "mobs_meat_raw.png",
|
inventory_image = "mobs_meat_raw.png",
|
||||||
on_use = minetest.item_eat(3),
|
on_use = minetest.item_eat(3),
|
||||||
|
groups = {food_meat_raw = 1, flammable = 2},
|
||||||
})
|
})
|
||||||
|
|
||||||
-- cooked meat
|
-- cooked meat
|
||||||
minetest.register_craftitem("mobs:meat", {
|
minetest.register_craftitem("mobs:meat", {
|
||||||
description = "Meat",
|
description = S("Meat"),
|
||||||
inventory_image = "mobs_meat.png",
|
inventory_image = "mobs_meat.png",
|
||||||
on_use = minetest.item_eat(8),
|
on_use = minetest.item_eat(8),
|
||||||
|
groups = {food_meat = 1, flammable = 2},
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
@ -38,40 +46,49 @@ minetest.register_craft({
|
|||||||
cooktime = 5,
|
cooktime = 5,
|
||||||
})
|
})
|
||||||
|
|
||||||
-- golden lasso
|
-- lasso
|
||||||
minetest.register_tool("mobs:magic_lasso", {
|
minetest.register_tool("mobs:lasso", {
|
||||||
description = "Magic Lasso (right-click animal to put in inventory)",
|
description = S("Lasso (right-click animal to put in inventory)"),
|
||||||
inventory_image = "mobs_magic_lasso.png",
|
inventory_image = "mobs_magic_lasso.png",
|
||||||
|
groups = {flammable = 2},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if minetest.get_modpath("farming") then
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = "mobs:magic_lasso",
|
output = "mobs:lasso",
|
||||||
recipe = {
|
recipe = {
|
||||||
{"farming:string", "default:gold_lump", "farming:string"},
|
{"farming:string", "", "farming:string"},
|
||||||
{"default:gold_lump", "default:diamondblock", "default:gold_lump"},
|
{"", "default:diamond", ""},
|
||||||
{"farming:string", "default:gold_lump", "farming:string"},
|
{"farming:string", "", "farming:string"},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
minetest.register_alias("mobs:magic_lasso", "mobs:lasso")
|
||||||
|
|
||||||
-- net
|
-- net
|
||||||
minetest.register_tool("mobs:net", {
|
minetest.register_tool("mobs:net", {
|
||||||
description = "Net (right-click animal to put in inventory)",
|
description = S("Net (right-click animal to put in inventory)"),
|
||||||
inventory_image = "mobs_net.png",
|
inventory_image = "mobs_net.png",
|
||||||
|
groups = {flammable = 2},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if minetest.get_modpath("farming") then
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = "mobs:net",
|
output = "mobs:net",
|
||||||
recipe = {
|
recipe = {
|
||||||
{"default:stick", "", "default:stick"},
|
{"group:stick", "", "group:stick"},
|
||||||
{"default:stick", "", "default:stick"},
|
{"group:stick", "", "group:stick"},
|
||||||
{"farming:string", "default:stick", "farming:string"},
|
{"farming:string", "group:stick", "farming:string"},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
end
|
||||||
|
|
||||||
-- shears (right click to shear animal)
|
-- shears (right click to shear animal)
|
||||||
minetest.register_tool("mobs:shears", {
|
minetest.register_tool("mobs:shears", {
|
||||||
description = "Steel Shears (right-click to shear)",
|
description = S("Steel Shears (right-click to shear)"),
|
||||||
inventory_image = "mobs_shears.png",
|
inventory_image = "mobs_shears.png",
|
||||||
|
groups = {flammable = 2},
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
@ -81,3 +98,124 @@ minetest.register_craft({
|
|||||||
{'', 'group:stick', 'default:steel_ingot'},
|
{'', 'group:stick', 'default:steel_ingot'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- protection rune
|
||||||
|
minetest.register_craftitem("mobs:protector", {
|
||||||
|
description = S("Mob Protection Rune"),
|
||||||
|
inventory_image = "mobs_protector.png",
|
||||||
|
groups = {flammable = 2},
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "mobs:protector",
|
||||||
|
recipe = {
|
||||||
|
{"default:stone", "default:stone", "default:stone"},
|
||||||
|
{"default:stone", "default:goldblock", "default:stone"},
|
||||||
|
{"default:stone", "default:stone", "default:stone"},
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
-- saddle
|
||||||
|
minetest.register_craftitem("mobs:saddle", {
|
||||||
|
description = S("Saddle"),
|
||||||
|
inventory_image = "mobs_saddle.png",
|
||||||
|
groups = {flammable = 2},
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "mobs:saddle",
|
||||||
|
recipe = {
|
||||||
|
{"mobs:leather", "mobs:leather", "mobs:leather"},
|
||||||
|
{"mobs:leather", "default:steel_ingot", "mobs:leather"},
|
||||||
|
{"mobs:leather", "default:steel_ingot", "mobs:leather"},
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
-- mob fence (looks like normal fence but collision is 2 high)
|
||||||
|
default.register_fence("mobs:fence_wood", {
|
||||||
|
description = S("Mob Fence"),
|
||||||
|
texture = "default_wood.png",
|
||||||
|
material = "default:fence_wood",
|
||||||
|
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
|
||||||
|
sounds = default.node_sound_wood_defaults(),
|
||||||
|
collision_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {
|
||||||
|
{-0.5, -0.5, -0.5, 0.5, 1.9, 0.5},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
-- mob fence top (has enlarged collisionbox to stop mobs getting over)
|
||||||
|
minetest.register_node("mobs:fence_top", {
|
||||||
|
description = S("Mob Fence Top"),
|
||||||
|
drawtype = "nodebox",
|
||||||
|
tiles = {"default_wood.png"},
|
||||||
|
paramtype = "light",
|
||||||
|
is_ground_content = false,
|
||||||
|
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
|
||||||
|
sounds = default.node_sound_wood_defaults(),
|
||||||
|
node_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {-0.2, -0.5, -0.2, 0.2, 0, 0.2},
|
||||||
|
},
|
||||||
|
collision_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {-0.4, -1.5, -0.4, 0.4, 0, 0.4},
|
||||||
|
},
|
||||||
|
selection_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {-0.4, -1.5, -0.4, 0.4, 0, 0.4},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "mobs:fence_top 12",
|
||||||
|
recipe = {
|
||||||
|
{"group:wood", "group:wood", "group:wood"},
|
||||||
|
{"", "default:fence_wood", ""},
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
-- items that can be used as fuel
|
||||||
|
minetest.register_craft({
|
||||||
|
type = "fuel",
|
||||||
|
recipe = "mobs:nametag",
|
||||||
|
burntime = 3,
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
type = "fuel",
|
||||||
|
recipe = "mobs:lasso",
|
||||||
|
burntime = 7,
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
type = "fuel",
|
||||||
|
recipe = "mobs:net",
|
||||||
|
burntime = 8,
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
type = "fuel",
|
||||||
|
recipe = "mobs:leather",
|
||||||
|
burntime = 4,
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
type = "fuel",
|
||||||
|
recipe = "mobs:saddle",
|
||||||
|
burntime = 7,
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
type = "fuel",
|
||||||
|
recipe = "mobs:fence_wood",
|
||||||
|
burntime = 7,
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
type = "fuel",
|
||||||
|
recipe = "mobs:fence_top",
|
||||||
|
burntime = 2,
|
||||||
|
})
|
||||||
|
@ -1 +1,9 @@
|
|||||||
default
|
default
|
||||||
|
tnt?
|
||||||
|
dye?
|
||||||
|
farming?
|
||||||
|
invisibility?
|
||||||
|
intllib?
|
||||||
|
lucky_block?
|
||||||
|
cmi?
|
||||||
|
toolranks?
|
||||||
|
@ -1 +1 @@
|
|||||||
Adds a mob api for mods to add animals or monsters etc
|
Adds a mob api for mods to add animals or monsters etc.
|
12
init.lua
12
init.lua
@ -1,13 +1,19 @@
|
|||||||
|
|
||||||
local path = minetest.get_modpath("mobs")
|
local path = minetest.get_modpath("mobs")
|
||||||
|
|
||||||
-- Mob Api
|
-- Mob API
|
||||||
dofile(path .. "/api.lua")
|
dofile(path .. "/api.lua")
|
||||||
|
|
||||||
|
-- Rideable Mobs
|
||||||
|
dofile(path .. "/mount.lua")
|
||||||
|
|
||||||
-- Mob Items
|
-- Mob Items
|
||||||
dofile(path .. "/crafts.lua")
|
dofile(path .. "/crafts.lua")
|
||||||
|
|
||||||
-- Spawner
|
-- Mob Spawner
|
||||||
dofile(path .. "/spawner.lua")
|
dofile(path .. "/spawner.lua")
|
||||||
|
|
||||||
print ("[MOD] Mobs Redo loaded")
|
-- Lucky Blocks
|
||||||
|
dofile(path .. "/lucky_block.lua")
|
||||||
|
|
||||||
|
minetest.log("action", "[MOD] Mobs Redo loaded")
|
||||||
|
45
intllib.lua
Normal file
45
intllib.lua
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
|
||||||
|
-- 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
|
@ -1,6 +1,6 @@
|
|||||||
The MIT License (MIT)
|
The MIT License (MIT)
|
||||||
|
|
||||||
Copyright (c) 2014 Krupnov Pavel
|
Copyright (c) 2016 TenPlus1
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
131
locale/de_DE.po
Normal file
131
locale/de_DE.po
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
# Mobs Redo translation.
|
||||||
|
# Copyright (C) 2017 TenPlus1
|
||||||
|
# This file is distributed under the same license as the mobs package.
|
||||||
|
# Wuzzy <Wuzzy@mail.ru>, 2017
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: mobs\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2017-07-02 16:48+0200\n"
|
||||||
|
"PO-Revision-Date: 2017-07-02 14:27+0200\n"
|
||||||
|
"Last-Translator: Wuzzy <almikes@aol.com>\n"
|
||||||
|
"Language-Team: \n"
|
||||||
|
"Language: de_DE\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Generator: Poedit 2.0.2\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "** Peaceful Mode Active - No Monsters Will Spawn"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Mob has been protected!"
|
||||||
|
msgstr "Kreatur wurde geschützt!"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "@1 (Tamed)"
|
||||||
|
msgstr "@1 (Gezähmt)"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Not tamed!"
|
||||||
|
msgstr "Nicht gezähmt!"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "@1 is owner!"
|
||||||
|
msgstr "@1 ist der Besitzer!"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Missed!"
|
||||||
|
msgstr "Daneben!"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Already protected!"
|
||||||
|
msgstr "Bereits geschützt!"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "@1 at full health (@2)"
|
||||||
|
msgstr "@1 bei voller Gesundheit (@2)"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "@1 has been tamed!"
|
||||||
|
msgstr "@1 wurde gezähmt!"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Enter name:"
|
||||||
|
msgstr "Namen eingeben:"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Rename"
|
||||||
|
msgstr "Umbenennen"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Name Tag"
|
||||||
|
msgstr "Namensschild"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Leather"
|
||||||
|
msgstr "Leder"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Raw Meat"
|
||||||
|
msgstr "Rohes Fleisch"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Meat"
|
||||||
|
msgstr "Fleisch"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Lasso (right-click animal to put in inventory)"
|
||||||
|
msgstr "Lasso (Rechtsklick auf Tier, um es zu nehmen)"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Net (right-click animal to put in inventory)"
|
||||||
|
msgstr "Netz (Rechtsklick auf Tier, um es zu nehmen)"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Steel Shears (right-click to shear)"
|
||||||
|
msgstr "Stahlschere (Rechtsklick zum Scheren)"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Mob Protection Rune"
|
||||||
|
msgstr "Kreaturschutzrune"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Saddle"
|
||||||
|
msgstr "Sattel"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Mob Fence"
|
||||||
|
msgstr "Kreaturen Zaun"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Mob Spawner"
|
||||||
|
msgstr "Kreaturenspawner"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Mob MinLight MaxLight Amount PlayerDist"
|
||||||
|
msgstr "Kreatur MinLicht MaxLicht Menge SpielerEntfng"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Spawner Not Active (enter settings)"
|
||||||
|
msgstr "Nicht aktiv (Einstellungen eingeben)"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Spawner Active (@1)"
|
||||||
|
msgstr "Spawner aktiv (@1)"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Mob Spawner settings failed!"
|
||||||
|
msgstr "Kreaturenspawner-Einstellungen gescheitert!"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid ""
|
||||||
|
"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]”"
|
||||||
|
msgstr ""
|
||||||
|
"Syntax: „name min_licht[0-14] max_licht[0-14] max_mobs_im_gebiet[0 zum "
|
||||||
|
"Deaktivieren] distanz[1-20] y_versatz[-10 bis 10]“"
|
128
locale/es.po
Normal file
128
locale/es.po
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
# Mobs Redo translation.
|
||||||
|
# Copyright (C) 2017 TenPlus1
|
||||||
|
# This file is distributed under the same license as the mobs package.
|
||||||
|
# Wuzzy <Wuzzy@mail.ru>, 2017
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2017-07-16 16:48+0200\n"
|
||||||
|
"PO-Revision-Date: 2017-07-16 16:48+0200\n"
|
||||||
|
"Last-Translator: Aleks <alexsinteck@icqmail.com>\n"
|
||||||
|
"Language-Team: \n"
|
||||||
|
"Language: es\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "** Peaceful Mode Active - No Monsters Will Spawn"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Mob has been protected!"
|
||||||
|
msgstr "El mob ha sido protegido!"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "@1 (Tamed)"
|
||||||
|
msgstr "@1 (Domesticado)"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Not tamed!"
|
||||||
|
msgstr "No domesticado!"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "@1 is owner!"
|
||||||
|
msgstr "@1 es el dueño!"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Missed!"
|
||||||
|
msgstr "Perdido!"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Already protected!"
|
||||||
|
msgstr "Ya está protegido!"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "@1 at full health (@2)"
|
||||||
|
msgstr "@1 con salud llena (@2)"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "@1 has been tamed!"
|
||||||
|
msgstr "@1 ha sido domesticado!"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Enter name:"
|
||||||
|
msgstr "Ingrese nombre:"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Rename"
|
||||||
|
msgstr "Renombrar"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Name Tag"
|
||||||
|
msgstr "Nombrar etiqueta"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Leather"
|
||||||
|
msgstr "Cuero"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Raw Meat"
|
||||||
|
msgstr "Carne cruda"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Meat"
|
||||||
|
msgstr "Carne"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Lasso (right-click animal to put in inventory)"
|
||||||
|
msgstr "Lazo (click derecho en animal para colocar en inventario)"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Net (right-click animal to put in inventory)"
|
||||||
|
msgstr "Red (click derecho en animal para colocar en inventario)"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Steel Shears (right-click to shear)"
|
||||||
|
msgstr "Tijera de acero (click derecho para esquilar)"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Mob Protection Rune"
|
||||||
|
msgstr "Runa de protección de Mob"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Saddle"
|
||||||
|
msgstr "Montura"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Mob Fence"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Mob Spawner"
|
||||||
|
msgstr "Generador de Mob"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Mob MinLight MaxLight Amount PlayerDist"
|
||||||
|
msgstr "Mob LuzMin LuzMax Cantidad DistJugador"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Spawner Not Active (enter settings)"
|
||||||
|
msgstr "Generador no activo (ingrese config)"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Spawner Active (@1)"
|
||||||
|
msgstr "Generador activo (@1)"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Mob Spawner settings failed!"
|
||||||
|
msgstr "Configuracion de generador de Mob falló!"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid ""
|
||||||
|
"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]”"
|
||||||
|
msgstr "Sintaxis: “nombre luz_min[0-14] luz_max[0-14] max_mobs_en_area[0 para deshabilitar] "
|
||||||
|
"distancia[1-20] compensacion[-10 a 10]”"
|
129
locale/fr.po
Normal file
129
locale/fr.po
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: \n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2017-07-29 09:13+0200\n"
|
||||||
|
"PO-Revision-Date: 2017-07-29 09:20+0200\n"
|
||||||
|
"Language-Team: \n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\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
|
||||||
|
msgid "** Peaceful Mode Active - No Monsters Will Spawn"
|
||||||
|
msgstr "** Mode pacifique activé - Aucun monstre ne sera généré"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Mob has been protected!"
|
||||||
|
msgstr "L'animal a été protégé !"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "@1 (Tamed)"
|
||||||
|
msgstr "@1 (apprivoisé)"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Not tamed!"
|
||||||
|
msgstr "Non-apprivoisé !"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "@1 is owner!"
|
||||||
|
msgstr "Appartient à @1 !"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Missed!"
|
||||||
|
msgstr "Raté !"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Already protected!"
|
||||||
|
msgstr "Déjà protégé !"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "@1 at full health (@2)"
|
||||||
|
msgstr "@1 est en pleine forme (@2) "
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "@1 has been tamed!"
|
||||||
|
msgstr "@1 a été apprivoisé ! "
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Enter name:"
|
||||||
|
msgstr "Saisissez un nom :"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Rename"
|
||||||
|
msgstr "Renommer"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Name Tag"
|
||||||
|
msgstr "Étiquette pour collier"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Leather"
|
||||||
|
msgstr "Cuir"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Raw Meat"
|
||||||
|
msgstr "Viande crue"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Meat"
|
||||||
|
msgstr "Viande"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Lasso (right-click animal to put in inventory)"
|
||||||
|
msgstr "Lasso (clic droit sur l'animal pour le mettre dans l'inventaire)"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Net (right-click animal to put in inventory)"
|
||||||
|
msgstr "Filet (clic droit sur l'animal pour le mettre dans l'inventaire)"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Steel Shears (right-click to shear)"
|
||||||
|
msgstr "Ciseaux à laine (clic droit pour tondre)"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Mob Protection Rune"
|
||||||
|
msgstr "Rune de protection des animaux"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Saddle"
|
||||||
|
msgstr "Selle"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Mob Fence"
|
||||||
|
msgstr "Clôture à animaux"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Mob Spawner"
|
||||||
|
msgstr "Générateur de mob"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Mob MinLight MaxLight Amount PlayerDist"
|
||||||
|
msgstr "Mob MinLumière MaxLumière Quantité DistanceJoueur"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Spawner Not Active (enter settings)"
|
||||||
|
msgstr "Générateur non actif (entrez les paramètres)"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Spawner Active (@1)"
|
||||||
|
msgstr "Générateur actif (@1)"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Mob Spawner settings failed!"
|
||||||
|
msgstr "Echec des paramètres du générateur"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid ""
|
||||||
|
"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]”"
|
||||||
|
msgstr "Syntaxe : “nom min_lumière[0-14] max_lumière[0-14] max_mobs_dans_zone[0 pour désactiver] distance[1-20] décalage_y[-10 à 10]“"
|
131
locale/it.po
Normal file
131
locale/it.po
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
# ITALIAN LOCALE FILE FOR THE MOBS REDO MODULE
|
||||||
|
# Copyright (c) 2014 Krupnov Pavel and 2016 TenPlus1
|
||||||
|
# This file is distributed under the same license as the MOBS REDO package.
|
||||||
|
# Hamlet <h4mlet@riseup.net>, 2017.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: Italian locale file for the Mobs Redo module\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2017-07-02 16:48+0200\n"
|
||||||
|
"PO-Revision-Date: 2017-08-18 12:18+0100\n"
|
||||||
|
"Last-Translator: H4mlet <h4mlet@riseup.net>\n"
|
||||||
|
"Language-Team: \n"
|
||||||
|
"Language: it\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"X-Generator: Poedit 1.6.10\n"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "** Peaceful Mode Active - No Monsters Will Spawn"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Mob has been protected!"
|
||||||
|
msgstr "Il mob è stato protetto!"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "@1 (Tamed)"
|
||||||
|
msgstr "@1 (Addomesticat*)"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Not tamed!"
|
||||||
|
msgstr "Non addomesticat*!"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "@1 is owner!"
|
||||||
|
msgstr "Proprietari* @1!"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Missed!"
|
||||||
|
msgstr "Mancat*!"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Already protected!"
|
||||||
|
msgstr "Già protett*!"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "@1 at full health (@2)"
|
||||||
|
msgstr "@1 in piena salute (@2)"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "@1 has been tamed!"
|
||||||
|
msgstr "@1 è stat* addomesticat*!"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Enter name:"
|
||||||
|
msgstr "Inserire il nome:"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Rename"
|
||||||
|
msgstr "Rinominare"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Name Tag"
|
||||||
|
msgstr "Targhetta"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Leather"
|
||||||
|
msgstr "Pelle"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Raw Meat"
|
||||||
|
msgstr "Carne cruda"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Meat"
|
||||||
|
msgstr "Carne"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Lasso (right-click animal to put in inventory)"
|
||||||
|
msgstr "Lazo (click di destro per mettere l'animale nell'inventario)"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Net (right-click animal to put in inventory)"
|
||||||
|
msgstr "Rete (click destro per mettere l'animale nell'inventario)"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Steel Shears (right-click to shear)"
|
||||||
|
msgstr "Cesoie d'acciaio (click destro per tosare)"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Mob Protection Rune"
|
||||||
|
msgstr "Runa di protezione per mob"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Saddle"
|
||||||
|
msgstr "Sella"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Mob Fence"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Mob Spawner"
|
||||||
|
msgstr "Generatore di mob"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Mob MinLight MaxLight Amount PlayerDist"
|
||||||
|
msgstr "Mob LuceMin LuceMax Ammontare DistGiocat."
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Spawner Not Active (enter settings)"
|
||||||
|
msgstr "Generatore inattivo (inserire le impostazioni)"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Spawner Active (@1)"
|
||||||
|
msgstr "Generatore attivo (@1)"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Mob Spawner settings failed!"
|
||||||
|
msgstr "Impostazioni del generatore di mob fallite!"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid ""
|
||||||
|
"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]”"
|
||||||
|
msgstr ""
|
||||||
|
"Sintassi: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 per "
|
||||||
|
"disabilitare] distance[1-20] y_offset[-10 to 10]”"
|
131
locale/ms.po
Normal file
131
locale/ms.po
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: \n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2018-02-05 23:40+0800\n"
|
||||||
|
"PO-Revision-Date: 2018-02-05 23:51+0800\n"
|
||||||
|
"Language-Team: \n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Generator: Poedit 2.0.6\n"
|
||||||
|
"Last-Translator: MuhdNurHidayat (MNH48) <mnh48mail@gmail.com>\n"
|
||||||
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
"Language: ms\n"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "** Peaceful Mode Active - No Monsters Will Spawn"
|
||||||
|
msgstr "** Mod Aman Diaktifkan - Tiada Raksasa Akan Muncul"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Mob has been protected!"
|
||||||
|
msgstr "Mob telah pun dilindungi!"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "@1 (Tamed)"
|
||||||
|
msgstr "@1 (Jinak)"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Not tamed!"
|
||||||
|
msgstr "Belum dijinakkan!"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "@1 is owner!"
|
||||||
|
msgstr "Ini hak milik @1!"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Missed!"
|
||||||
|
msgstr "Terlepas!"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Already protected!"
|
||||||
|
msgstr "Telah dilindungi!"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "@1 at full health (@2)"
|
||||||
|
msgstr "Mata kesihatan @1 telah penuh (@2)"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "@1 has been tamed!"
|
||||||
|
msgstr "@1 telah dijinakkan!"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Enter name:"
|
||||||
|
msgstr "Masukkan nama:"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Rename"
|
||||||
|
msgstr "Namakan semula"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Name Tag"
|
||||||
|
msgstr "Tanda Nama"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Leather"
|
||||||
|
msgstr "Kulit"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Raw Meat"
|
||||||
|
msgstr "Daging Mentah"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Meat"
|
||||||
|
msgstr "Daging Bakar"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Lasso (right-click animal to put in inventory)"
|
||||||
|
msgstr "Tanjul (klik-kanan haiwan untuk masukkan ke inventori)"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Net (right-click animal to put in inventory)"
|
||||||
|
msgstr "Jaring (klik-kanan haiwan untuk masukkan ke inventori)"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Steel Shears (right-click to shear)"
|
||||||
|
msgstr "Ketam Keluli (klik-kanan untuk mengetam bulu biri-biri)"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Mob Protection Rune"
|
||||||
|
msgstr "Rune Perlindungan Mob"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Saddle"
|
||||||
|
msgstr "Pelana"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Mob Fence"
|
||||||
|
msgstr "Pagar Mob"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Mob Spawner"
|
||||||
|
msgstr "Pewujud Mob"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Mob MinLight MaxLight Amount PlayerDist"
|
||||||
|
msgstr "Mob CahayaMin CahayaMax Amaun JarakPemain"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Spawner Not Active (enter settings)"
|
||||||
|
msgstr "Pewujud Mob Tidak Aktif (masukkan tetapan)"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Spawner Active (@1)"
|
||||||
|
msgstr "Pewujud Mob Aktif (@1)"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Mob Spawner settings failed!"
|
||||||
|
msgstr "Penetapan Pewujud Mob gagal!"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid ""
|
||||||
|
"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]”"
|
||||||
|
msgstr ""
|
||||||
|
"Sintaks: \"nama cahaya_minimum[0-14] cahaya_maksimum[0-14] "
|
||||||
|
"amaun_mob_maksimum[0 untuk lumpuhkan] jarak[1-20] ketinggian[-10 hingga 10]\""
|
133
locale/pt.po
Normal file
133
locale/pt.po
Normal file
@ -0,0 +1,133 @@
|
|||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: mobs\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2017-07-02 16:48+0200\n"
|
||||||
|
"PO-Revision-Date: 2017-07-02 14:55+0200\n"
|
||||||
|
"Last-Translator: Wuzzy <almikes@aol.com>\n"
|
||||||
|
"Language-Team: \n"
|
||||||
|
"Language: pt\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Generator: Poedit 2.0.2\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "** Peaceful Mode Active - No Monsters Will Spawn"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Mob has been protected!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "@1 (Tamed)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Not tamed!"
|
||||||
|
msgstr "Indomesticado!"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "@1 is owner!"
|
||||||
|
msgstr "Dono @1!"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Missed!"
|
||||||
|
msgstr "Faltou!"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Already protected!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "@1 at full health (@2)"
|
||||||
|
msgstr "@1 em plena saude (@2)"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "@1 has been tamed!"
|
||||||
|
msgstr "@1 foi domesticado!"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Enter name:"
|
||||||
|
msgstr "Insira um nome:"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Rename"
|
||||||
|
msgstr "Renomear"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Name Tag"
|
||||||
|
msgstr "Etiqueta"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Leather"
|
||||||
|
msgstr "Couro"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Raw Meat"
|
||||||
|
msgstr "Carne crua"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Meat"
|
||||||
|
msgstr "Carne"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Lasso (right-click animal to put in inventory)"
|
||||||
|
msgstr "Laço (clique-direito no animal para por no inventario)"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Net (right-click animal to put in inventory)"
|
||||||
|
msgstr "Net (clique-direito no animal para por no inventario)"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Steel Shears (right-click to shear)"
|
||||||
|
msgstr "Tesoura de Aço (clique-direito para tosquiar)"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Mob Protection Rune"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Saddle"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Mob Fence"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Mob Spawner"
|
||||||
|
msgstr "Spawnador de Mob"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Mob MinLight MaxLight Amount PlayerDist"
|
||||||
|
msgstr "Mob LuzMinima LuzMaxima Valor DistJogador"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Spawner Not Active (enter settings)"
|
||||||
|
msgstr "Spawnador Inativo (configurar)"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Spawner Active (@1)"
|
||||||
|
msgstr "Spawnador Ativo (@1)"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Mob Spawner settings failed!"
|
||||||
|
msgstr "Configuraçao de Spawnador do Mob falhou!"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
#, fuzzy
|
||||||
|
msgid ""
|
||||||
|
"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]”"
|
||||||
|
msgstr ""
|
||||||
|
"> nome luz_min[0-14] luz_max[0-14] max_mobs_na_area[0 para desabilitar] "
|
||||||
|
"distancia[1-20] y_offset[-10 a 10]"
|
129
locale/ru.po
Normal file
129
locale/ru.po
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
# Russian translation for the mobs_redo mod.
|
||||||
|
# Copyright (C) 2018 TenPlus1
|
||||||
|
# This file is distributed under the same license as the mobs_redo package.
|
||||||
|
# Oleg720 <olegsiriak@yandex.ru>, 2017.
|
||||||
|
# CodeXP <codexp@gmx.net>, 2018.
|
||||||
|
#
|
||||||
|
#, fuzzy
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2017-08-13 15:47+0200\n"
|
||||||
|
"PO-Revision-Date: 2018-03-23 22:22+0100\n"
|
||||||
|
"Last-Translator: CodeXP <codexp@gmx.net>\n"
|
||||||
|
"Language-Team: \n"
|
||||||
|
"Language: ru\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "** Peaceful Mode Active - No Monsters Will Spawn"
|
||||||
|
msgstr "** Мирный модус активирован - монстры не спаунятся"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Mob has been protected!"
|
||||||
|
msgstr "Моб защищен!"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "@1 (Tamed)"
|
||||||
|
msgstr "@1 (Прирученный)"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Not tamed!"
|
||||||
|
msgstr "Не прирученный"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "@1 is owner!"
|
||||||
|
msgstr "@1 владелец"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Missed!"
|
||||||
|
msgstr "Промазал!"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Already protected!"
|
||||||
|
msgstr "Уже защищен!"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "@1 at full health (@2)"
|
||||||
|
msgstr "@1 при полном здоровье (@2)"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "@1 has been tamed!"
|
||||||
|
msgstr "@1 приручен"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Enter name:"
|
||||||
|
msgstr "Введите имя:"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Rename"
|
||||||
|
msgstr "Переименовать"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Name Tag"
|
||||||
|
msgstr "Новый тэг"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Leather"
|
||||||
|
msgstr "Кожа"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Raw Meat"
|
||||||
|
msgstr "Сырое мясо"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Meat"
|
||||||
|
msgstr "Мясо"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Lasso (right-click animal to put in inventory)"
|
||||||
|
msgstr "Лассо (Правый клик - положить животное в инвентарь)"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Net (right-click animal to put in inventory)"
|
||||||
|
msgstr "Сеть (Правый клик - положить животное в инвентарь)"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Steel Shears (right-click to shear)"
|
||||||
|
msgstr "Ножницы (Правый клик - подстричь)"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Mob Protection Rune"
|
||||||
|
msgstr "Защитная руна мобов"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Saddle"
|
||||||
|
msgstr "Седло"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Mob Fence"
|
||||||
|
msgstr "Забор от мобов"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Mob Spawner"
|
||||||
|
msgstr "Спаунер моба"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Mob MinLight MaxLight Amount PlayerDist"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Spawner Not Active (enter settings)"
|
||||||
|
msgstr "Спаунер не активен (введите настройки)"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Spawner Active (@1)"
|
||||||
|
msgstr "Активные спаунер (@1)"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Mob Spawner settings failed!"
|
||||||
|
msgstr "Настройки спаунера моба провалились"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid ""
|
||||||
|
"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]”"
|
||||||
|
msgstr ""
|
128
locale/template.pot
Normal file
128
locale/template.pot
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
|
#
|
||||||
|
#, fuzzy
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2017-07-02 16:48+0200\n"
|
||||||
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
"Language: \n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "** Peaceful Mode Active - No Monsters Will Spawn"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Mob has been protected!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "@1 (Tamed)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Not tamed!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "@1 is owner!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Missed!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Already protected!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "@1 at full health (@2)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "@1 has been tamed!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Enter name:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Rename"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Name Tag"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Leather"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Raw Meat"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Meat"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Lasso (right-click animal to put in inventory)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Net (right-click animal to put in inventory)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Steel Shears (right-click to shear)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Mob Protection Rune"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Saddle"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Mob Fence"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Mob Spawner"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Mob MinLight MaxLight Amount PlayerDist"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Spawner Not Active (enter settings)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Spawner Active (@1)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Mob Spawner settings failed!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid ""
|
||||||
|
"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]”"
|
||||||
|
msgstr ""
|
133
locale/tr.po
Normal file
133
locale/tr.po
Normal file
@ -0,0 +1,133 @@
|
|||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: mobs\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2017-07-02 16:48+0200\n"
|
||||||
|
"PO-Revision-Date: 2017-07-02 14:56+0200\n"
|
||||||
|
"Last-Translator: Wuzzy <almikes@aol.com>\n"
|
||||||
|
"Language-Team: \n"
|
||||||
|
"Language: tr\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Generator: Poedit 2.0.2\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "** Peaceful Mode Active - No Monsters Will Spawn"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Mob has been protected!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "@1 (Tamed)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Not tamed!"
|
||||||
|
msgstr "Evcil değil!"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "@1 is owner!"
|
||||||
|
msgstr "Sahibi @1!"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Missed!"
|
||||||
|
msgstr "Kaçırdın!"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Already protected!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "@1 at full health (@2)"
|
||||||
|
msgstr "@1 tam canında (@2)"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "@1 has been tamed!"
|
||||||
|
msgstr "@1 tamamen evcilleştirilmiştir!"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Enter name:"
|
||||||
|
msgstr "İsim gir:"
|
||||||
|
|
||||||
|
#: api.lua
|
||||||
|
msgid "Rename"
|
||||||
|
msgstr "Yeniden adlandır"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Name Tag"
|
||||||
|
msgstr "İsim etiketi"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Leather"
|
||||||
|
msgstr "Deri"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Raw Meat"
|
||||||
|
msgstr "Çiğ et"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Meat"
|
||||||
|
msgstr "Et"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Lasso (right-click animal to put in inventory)"
|
||||||
|
msgstr "Kement (hayvana sağ tıklayarak envantere koy)"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Net (right-click animal to put in inventory)"
|
||||||
|
msgstr "Ağ (hayvana sağ tıklayarak envantere koy)"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Steel Shears (right-click to shear)"
|
||||||
|
msgstr "Çelik makas (sağ tıklayarak kes)"
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Mob Protection Rune"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Saddle"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: crafts.lua
|
||||||
|
msgid "Mob Fence"
|
||||||
|
msgstr "Canavar Yaratıcı"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Mob Spawner"
|
||||||
|
msgstr "Canavar Yaratıcı"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Mob MinLight MaxLight Amount PlayerDist"
|
||||||
|
msgstr "Mob MinIşık MaxIşık Miktar OyuncuMesafesi"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Spawner Not Active (enter settings)"
|
||||||
|
msgstr "Yaratıcı aktif değil (ayarlara gir)"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Spawner Active (@1)"
|
||||||
|
msgstr "Yaratıcı aktif (@1)"
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
msgid "Mob Spawner settings failed!"
|
||||||
|
msgstr "Yaratıcı ayarları uygulanamadı."
|
||||||
|
|
||||||
|
#: spawner.lua
|
||||||
|
#, fuzzy
|
||||||
|
msgid ""
|
||||||
|
"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]”"
|
||||||
|
msgstr ""
|
||||||
|
"> isim min_isik[0-14] max_isik[0-14] alandaki_max_canavar_sayisi[kapatmak "
|
||||||
|
"icin 0] mesafe[1-20] y_cikinti[-10 ve 10 arası]"
|
18
lucky_block.lua
Normal file
18
lucky_block.lua
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
if minetest.get_modpath("lucky_block") then
|
||||||
|
|
||||||
|
lucky_block:add_blocks({
|
||||||
|
{"dro", {"mobs:meat_raw"}, 5},
|
||||||
|
{"dro", {"mobs:meat"}, 5},
|
||||||
|
{"dro", {"mobs:nametag"}, 1},
|
||||||
|
{"dro", {"mobs:leather"}, 5},
|
||||||
|
{"dro", {"default:stick"}, 10},
|
||||||
|
{"dro", {"mobs:net"}, 1},
|
||||||
|
{"dro", {"mobs:lasso"}, 1},
|
||||||
|
{"dro", {"mobs:shears"}, 1},
|
||||||
|
{"dro", {"mobs:protector"}, 1},
|
||||||
|
{"dro", {"mobs:fence_wood"}, 10},
|
||||||
|
{"dro", {"mobs:fence_top"}, 12},
|
||||||
|
{"lig"},
|
||||||
|
})
|
||||||
|
end
|
448
mount.lua
Normal file
448
mount.lua
Normal file
@ -0,0 +1,448 @@
|
|||||||
|
|
||||||
|
-- lib_mount by Blert2112 (edited by TenPlus1)
|
||||||
|
|
||||||
|
local enable_crash = false
|
||||||
|
local crash_threshold = 6.5 -- ignored if enable_crash=false
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Helper functions
|
||||||
|
--
|
||||||
|
|
||||||
|
local node_ok = function(pos, fallback)
|
||||||
|
|
||||||
|
fallback = fallback or mobs.fallback_node
|
||||||
|
|
||||||
|
local node = minetest.get_node_or_nil(pos)
|
||||||
|
|
||||||
|
if node and minetest.registered_nodes[node.name] then
|
||||||
|
return node
|
||||||
|
end
|
||||||
|
|
||||||
|
return {name = fallback}
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
local function node_is(pos)
|
||||||
|
|
||||||
|
local node = node_ok(pos)
|
||||||
|
|
||||||
|
if node.name == "air" then
|
||||||
|
return "air"
|
||||||
|
end
|
||||||
|
|
||||||
|
if minetest.get_item_group(node.name, "lava") ~= 0 then
|
||||||
|
return "lava"
|
||||||
|
end
|
||||||
|
|
||||||
|
if minetest.get_item_group(node.name, "liquid") ~= 0 then
|
||||||
|
return "liquid"
|
||||||
|
end
|
||||||
|
|
||||||
|
if minetest.registered_nodes[node.name].walkable == true then
|
||||||
|
return "walkable"
|
||||||
|
end
|
||||||
|
|
||||||
|
return "other"
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
local function get_sign(i)
|
||||||
|
|
||||||
|
i = i or 0
|
||||||
|
|
||||||
|
if i == 0 then
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return i / math.abs(i)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
local function get_velocity(v, yaw, y)
|
||||||
|
|
||||||
|
local x = -math.sin(yaw) * v
|
||||||
|
local z = math.cos(yaw) * v
|
||||||
|
|
||||||
|
return {x = x, y = y, z = z}
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
local function get_v(v)
|
||||||
|
return math.sqrt(v.x * v.x + v.z * v.z)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
local function force_detach(player)
|
||||||
|
|
||||||
|
local attached_to = player:get_attach()
|
||||||
|
|
||||||
|
if not attached_to then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local entity = attached_to:get_luaentity()
|
||||||
|
|
||||||
|
if entity.driver
|
||||||
|
and entity.driver == player then
|
||||||
|
|
||||||
|
entity.driver = nil
|
||||||
|
end
|
||||||
|
|
||||||
|
player:set_detach()
|
||||||
|
default.player_attached[player:get_player_name()] = false
|
||||||
|
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} })
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
minetest.register_on_leaveplayer(function(player)
|
||||||
|
force_detach(player)
|
||||||
|
end)
|
||||||
|
|
||||||
|
minetest.register_on_shutdown(function()
|
||||||
|
local players = minetest.get_connected_players()
|
||||||
|
for i = 1, #players do
|
||||||
|
force_detach(players[i])
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
minetest.register_on_dieplayer(function(player)
|
||||||
|
force_detach(player)
|
||||||
|
return true
|
||||||
|
end)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
function mobs.attach(entity, player)
|
||||||
|
|
||||||
|
local attach_at, eye_offset = {}, {}
|
||||||
|
|
||||||
|
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_eye_offset = entity.driver_eye_offset or {x = 0, y = 0, z = 0}
|
||||||
|
entity.driver_scale = entity.driver_scale or {x = 1, y = 1}
|
||||||
|
|
||||||
|
local rot_view = 0
|
||||||
|
|
||||||
|
if entity.player_rotation.y == 90 then
|
||||||
|
rot_view = math.pi/2
|
||||||
|
end
|
||||||
|
|
||||||
|
attach_at = entity.driver_attach_at
|
||||||
|
eye_offset = entity.driver_eye_offset
|
||||||
|
entity.driver = player
|
||||||
|
|
||||||
|
force_detach(player)
|
||||||
|
|
||||||
|
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_properties({
|
||||||
|
visual_size = {
|
||||||
|
x = entity.driver_scale.x,
|
||||||
|
y = entity.driver_scale.y
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.after(0.2, function()
|
||||||
|
default.player_set_animation(player, "sit" , 30)
|
||||||
|
end)
|
||||||
|
|
||||||
|
--player:set_look_yaw(entity.object:get_yaw() - rot_view)
|
||||||
|
player:set_look_horizontal(entity.object:get_yaw() - rot_view)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function mobs.detach(player, offset)
|
||||||
|
|
||||||
|
force_detach(player)
|
||||||
|
|
||||||
|
default.player_set_animation(player, "stand" , 30)
|
||||||
|
|
||||||
|
local pos = player:get_pos()
|
||||||
|
|
||||||
|
pos = {x = pos.x + offset.x, y = pos.y + 0.2 + offset.y, z = pos.z + offset.z}
|
||||||
|
|
||||||
|
minetest.after(0.1, function()
|
||||||
|
player:set_pos(pos)
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime)
|
||||||
|
|
||||||
|
local rot_steer, rot_view = math.pi/2, 0
|
||||||
|
|
||||||
|
if entity.player_rotation.y == 90 then
|
||||||
|
rot_steer, rot_view = 0, math.pi/2
|
||||||
|
end
|
||||||
|
|
||||||
|
local acce_y = 0
|
||||||
|
local velo = entity.object:get_velocity()
|
||||||
|
|
||||||
|
entity.v = get_v(velo) * get_sign(entity.v)
|
||||||
|
|
||||||
|
-- process controls
|
||||||
|
if entity.driver then
|
||||||
|
|
||||||
|
--print ("---velo", get_v(velo))
|
||||||
|
|
||||||
|
local ctrl = entity.driver:get_player_control()
|
||||||
|
|
||||||
|
-- move forwards
|
||||||
|
if ctrl.up then
|
||||||
|
|
||||||
|
entity.v = entity.v + entity.accel / 10
|
||||||
|
|
||||||
|
-- move backwards
|
||||||
|
elseif ctrl.down then
|
||||||
|
|
||||||
|
if entity.max_speed_reverse == 0 and entity.v == 0 then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
entity.v = entity.v - entity.accel / 10
|
||||||
|
end
|
||||||
|
|
||||||
|
-- fix mob rotation
|
||||||
|
entity.object:set_yaw(entity.driver:get_look_horizontal() - entity.rotate)
|
||||||
|
|
||||||
|
if can_fly then
|
||||||
|
|
||||||
|
-- fly up
|
||||||
|
if ctrl.jump then
|
||||||
|
velo.y = velo.y + 1
|
||||||
|
if velo.y > entity.accel then velo.y = entity.accel end
|
||||||
|
|
||||||
|
elseif velo.y > 0 then
|
||||||
|
velo.y = velo.y - 0.1
|
||||||
|
if velo.y < 0 then velo.y = 0 end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- fly down
|
||||||
|
if ctrl.sneak then
|
||||||
|
velo.y = velo.y - 1
|
||||||
|
if velo.y < -entity.accel then velo.y = -entity.accel end
|
||||||
|
|
||||||
|
elseif velo.y < 0 then
|
||||||
|
velo.y = velo.y + 0.1
|
||||||
|
if velo.y > 0 then velo.y = 0 end
|
||||||
|
end
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
-- jump
|
||||||
|
if ctrl.jump then
|
||||||
|
|
||||||
|
if velo.y == 0 then
|
||||||
|
velo.y = velo.y + entity.jump_height
|
||||||
|
acce_y = acce_y + (acce_y * 3) + 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- if not moving then set animation and return
|
||||||
|
if entity.v == 0 and velo.x == 0 and velo.y == 0 and velo.z == 0 then
|
||||||
|
|
||||||
|
if stand_anim then
|
||||||
|
mobs:set_animation(entity, stand_anim)
|
||||||
|
end
|
||||||
|
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- set moving animation
|
||||||
|
if moving_anim then
|
||||||
|
mobs:set_animation(entity, moving_anim)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Stop!
|
||||||
|
local s = get_sign(entity.v)
|
||||||
|
|
||||||
|
entity.v = entity.v - 0.02 * s
|
||||||
|
|
||||||
|
if s ~= get_sign(entity.v) then
|
||||||
|
|
||||||
|
entity.object:set_velocity({x = 0, y = 0, z = 0})
|
||||||
|
entity.v = 0
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- enforce speed limit forward and reverse
|
||||||
|
local max_spd = entity.max_speed_reverse
|
||||||
|
|
||||||
|
if get_sign(entity.v) >= 0 then
|
||||||
|
max_spd = entity.max_speed_forward
|
||||||
|
end
|
||||||
|
|
||||||
|
if math.abs(entity.v) > max_spd then
|
||||||
|
entity.v = entity.v - get_sign(entity.v)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Set position, velocity and acceleration
|
||||||
|
local p = entity.object:get_pos()
|
||||||
|
local new_velo = {x = 0, y = 0, z = 0}
|
||||||
|
local new_acce = {x = 0, y = -9.8, z = 0}
|
||||||
|
|
||||||
|
p.y = p.y - 0.5
|
||||||
|
|
||||||
|
local ni = node_is(p)
|
||||||
|
local v = entity.v
|
||||||
|
|
||||||
|
if ni == "air" then
|
||||||
|
|
||||||
|
if can_fly == true then
|
||||||
|
new_acce.y = 0
|
||||||
|
end
|
||||||
|
|
||||||
|
elseif ni == "liquid" or ni == "lava" then
|
||||||
|
|
||||||
|
if ni == "lava" and entity.lava_damage ~= 0 then
|
||||||
|
|
||||||
|
entity.lava_counter = (entity.lava_counter or 0) + dtime
|
||||||
|
|
||||||
|
if entity.lava_counter > 1 then
|
||||||
|
|
||||||
|
minetest.sound_play("default_punch", {
|
||||||
|
object = entity.object,
|
||||||
|
max_hear_distance = 5
|
||||||
|
})
|
||||||
|
|
||||||
|
entity.object:punch(entity.object, 1.0, {
|
||||||
|
full_punch_interval = 1.0,
|
||||||
|
damage_groups = {fleshy = entity.lava_damage}
|
||||||
|
}, nil)
|
||||||
|
|
||||||
|
entity.lava_counter = 0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if entity.terrain_type == 2
|
||||||
|
or entity.terrain_type == 3 then
|
||||||
|
|
||||||
|
new_acce.y = 0
|
||||||
|
p.y = p.y + 1
|
||||||
|
|
||||||
|
if node_is(p) == "liquid" then
|
||||||
|
|
||||||
|
if velo.y >= 5 then
|
||||||
|
velo.y = 5
|
||||||
|
elseif velo.y < 0 then
|
||||||
|
new_acce.y = 20
|
||||||
|
else
|
||||||
|
new_acce.y = 5
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if math.abs(velo.y) < 1 then
|
||||||
|
local pos = entity.object:get_pos()
|
||||||
|
pos.y = math.floor(pos.y) + 0.5
|
||||||
|
entity.object:set_pos(pos)
|
||||||
|
velo.y = 0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
v = v * 0.25
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
new_velo = get_velocity(v, entity.object:get_yaw() - rot_view, velo.y)
|
||||||
|
new_acce.y = new_acce.y + acce_y
|
||||||
|
|
||||||
|
entity.object:set_velocity(new_velo)
|
||||||
|
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
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
-- directional flying routine by D00Med (edited by TenPlus1)
|
||||||
|
|
||||||
|
function mobs.fly(entity, dtime, speed, shoots, arrow, moving_anim, stand_anim)
|
||||||
|
|
||||||
|
local ctrl = entity.driver:get_player_control()
|
||||||
|
local velo = entity.object:get_velocity()
|
||||||
|
local dir = entity.driver:get_look_dir()
|
||||||
|
local yaw = entity.driver:get_look_horizontal() + 1.57 -- offset fix between old and new commands
|
||||||
|
local rot_steer, rot_view = math.pi / 2, 0
|
||||||
|
|
||||||
|
if entity.player_rotation.y == 90 then
|
||||||
|
rot_steer, rot_view = 0, math.pi / 2
|
||||||
|
end
|
||||||
|
|
||||||
|
if ctrl.up then
|
||||||
|
entity.object:set_velocity({
|
||||||
|
x = dir.x * speed,
|
||||||
|
y = dir.y * speed + 2,
|
||||||
|
z = dir.z * speed
|
||||||
|
})
|
||||||
|
|
||||||
|
elseif ctrl.down then
|
||||||
|
entity.object:set_velocity({
|
||||||
|
x = -dir.x * speed,
|
||||||
|
y = dir.y * speed + 2,
|
||||||
|
z = -dir.z * speed
|
||||||
|
})
|
||||||
|
|
||||||
|
elseif not ctrl.down or ctrl.up or ctrl.jump then
|
||||||
|
entity.object:set_velocity({x = 0, y = -2, z = 0})
|
||||||
|
end
|
||||||
|
|
||||||
|
entity.object:set_yaw(yaw + math.pi + math.pi / 2 - entity.rotate)
|
||||||
|
|
||||||
|
-- firing arrows
|
||||||
|
if ctrl.LMB and ctrl.sneak and shoots then
|
||||||
|
|
||||||
|
local pos = entity.object:get_pos()
|
||||||
|
local obj = minetest.add_entity({
|
||||||
|
x = pos.x + 0 + dir.x * 2.5,
|
||||||
|
y = pos.y + 1.5 + dir.y,
|
||||||
|
z = pos.z + 0 + dir.z * 2.5}, arrow)
|
||||||
|
|
||||||
|
local ent = obj:get_luaentity()
|
||||||
|
if ent then
|
||||||
|
ent.switch = 1 -- for mob specific arrows
|
||||||
|
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 yaw = entity.driver:get_look_horizontal()
|
||||||
|
obj:set_yaw(yaw + math.pi / 2)
|
||||||
|
obj:set_velocity(vec)
|
||||||
|
else
|
||||||
|
obj:remove()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- change animation if stopped
|
||||||
|
if velo.x == 0 and velo.y == 0 and velo.z == 0 then
|
||||||
|
|
||||||
|
mobs:set_animation(entity, stand_anim)
|
||||||
|
else
|
||||||
|
-- moving animation
|
||||||
|
mobs:set_animation(entity, moving_anim)
|
||||||
|
end
|
||||||
|
end
|
34
readme.MD
34
readme.MD
@ -7,8 +7,40 @@ Built from PilzAdam's original Simple Mobs with additional mobs by KrupnoPavel,
|
|||||||
This mod contains the API only for adding your own mobs into the world, so please use the additional modpacks to add animals, monsters etc.
|
This mod contains the API only for adding your own mobs into the world, so please use the additional modpacks to add animals, monsters etc.
|
||||||
|
|
||||||
|
|
||||||
Changelog:
|
https://forum.minetest.net/viewtopic.php?f=11&t=9917
|
||||||
|
|
||||||
|
|
||||||
|
Crafts:
|
||||||
|
|
||||||
|
- Nametag (paper, black dye, string) can be used right-click on a tamed mob to give them a name.
|
||||||
|
- Nets can be used to right-click tamed mobs to pick them up and place inside inventory as a spawn egg.
|
||||||
|
- Magic Lasso is similar to nets but with a better chance of picking up larger mobs.
|
||||||
|
- Shears are used to right-click sheep and return 1-3 wool.
|
||||||
|
- Protection Rune lets you protect tamed mobs from harm by other players
|
||||||
|
- Mob Fence and Fence Top (to stop mobs escaping/glitching through fences)
|
||||||
|
|
||||||
|
Lucky Blocks: 9
|
||||||
|
|
||||||
|
|
||||||
|
Changelog:
|
||||||
|
- 1.47- Mob damage changes, min and max light level for damage added, ignition sources checked for lava damage
|
||||||
|
- 1.46- Mobs only drop rare items when killed by player (drops.min = 0 makes them rare), code tweak, pathfinding no longer sees through walkable nodes
|
||||||
|
- 1.45- Added Fence Top to add on top of any fence to stop mobs escaping, new line_of_sight tweaked by Astrobe
|
||||||
|
- 1.44- Added ToolRanks support for swords when attacking mobs
|
||||||
|
- 1.43- Better 0.4.16 compatibility, added general attack function and settings
|
||||||
|
- 1.42- Added "all" option to immune_to table, tidied floating mobs to be less intensive
|
||||||
|
- 1.41- Mob pathfinding has been updated thanks to Elkien3
|
||||||
|
- 1.40- Updated to use newer functions, requires Minetest 0.4.16+ to work.
|
||||||
|
- 1.39- Added 'on_breed', 'on_grown' and 'do_punch' custom functions per mob
|
||||||
|
- 1.38- Better entity checking, nametag setting and on_spawn function added to mob registry, tweaked light damage
|
||||||
|
- 1.37- Added support for Raymoo's CMI (common mob interface) mod: https://forum.minetest.net/viewtopic.php?f=9&t=15448
|
||||||
|
- 1.36- Death check added, if mob dies in fire/lava/with lava pick then drops are cooked
|
||||||
|
- 1.35- Added owner_loyal flag for owned mobs to attack player enemies, also fixed group_attack
|
||||||
|
- 1.34- Added function to fly mob using directional movement (thanks D00Med for flying code)
|
||||||
|
- 1.33- Added functions to mount ride mobs (mobs.attach, mobs.detach, mobs.drive) many thanks to Blert2112
|
||||||
|
- 1.32- Added new spawn check to count specific mobs AND new minetest.conf setting to chance spawn chance and numbers, added ability to protect tamed mobs
|
||||||
|
- 1.31- Added 'attack_animals' and 'specific_attack' flags for custom monster attacks, also 'mob_difficulty' .conf setting to make mobs harder.
|
||||||
|
- 1.30- Added support for invisibility mod (mobs cant attack what they cant see), tweaked and tidied code
|
||||||
- 1.29- Split original Mobs Redo into a modpack to make it easier to disable mob sets (animal, monster, npc) or simply use the Api itself for your own mod
|
- 1.29- Split original Mobs Redo into a modpack to make it easier to disable mob sets (animal, monster, npc) or simply use the Api itself for your own mod
|
||||||
- 1.28- New damage system added with ability for mob to be immune to weapons or healed by them :)
|
- 1.28- New damage system added with ability for mob to be immune to weapons or healed by them :)
|
||||||
- 1.27- Added new sheep, lava flan and spawn egg textures. New Lava Pick tool smelts what you dig. New atan checking function.
|
- 1.27- Added new sheep, lava flan and spawn egg textures. New Lava Pick tool smelts what you dig. New atan checking function.
|
||||||
|
29
settingtypes.txt
Normal file
29
settingtypes.txt
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
# If false then mobs no longer spawn in world without spawner or spawn egg
|
||||||
|
mobs_spawn (Spawn Mobs) bool true
|
||||||
|
|
||||||
|
# If enabled then monsters no longer spawn in world
|
||||||
|
only_peaceful_mobs (Only spawn peaceful Mobs) bool false
|
||||||
|
|
||||||
|
# If enabled then punching mobs no longer shows blood effects
|
||||||
|
mobs_disable_blood (Disable Mob blood) bool false
|
||||||
|
|
||||||
|
# If disabled then Mobs no longer destroy world blocks
|
||||||
|
mobs_griefing (Griefing Mobs) bool true
|
||||||
|
|
||||||
|
# If false then Mobs no longer spawn inside player protected areas
|
||||||
|
mobs_spawn_protected (Spawn Mobs in protected areas) bool true
|
||||||
|
|
||||||
|
# If true Mobs will be removed once a map chunk is out of view
|
||||||
|
remove_far_mobs (Remove far Mobs) bool true
|
||||||
|
|
||||||
|
# Sets Mob difficulty level by multiplying punch damage
|
||||||
|
mob_difficulty (Mob difficulty) float 1.0
|
||||||
|
|
||||||
|
# If disabled health status no longer appears above Mob when punched
|
||||||
|
mob_show_health (Show Mob health) bool true
|
||||||
|
|
||||||
|
# Contains a value used to multiply Mob spawn values
|
||||||
|
mob_chance_multiplier (Mob chance multiplier) float 1.0
|
||||||
|
|
||||||
|
# When false Mob no longer drop items when killed
|
||||||
|
mobs_drop_items (Mob drops) bool true
|
7
sounds/license.txt
Normal file
7
sounds/license.txt
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
Creative Commons sounds from Freesound.org
|
||||||
|
|
||||||
|
mobs_swing.ogg by qubodup
|
||||||
|
- http://freesound.org/people/qubodup/sounds/60012/
|
||||||
|
|
||||||
|
mobs_spell.ogg by littlerobotsoundfactory
|
||||||
|
- http://freesound.org/people/LittleRobotSoundFactory/sounds/270396/
|
BIN
sounds/mobs_spell.ogg
Normal file
BIN
sounds/mobs_spell.ogg
Normal file
Binary file not shown.
BIN
sounds/mobs_swing.ogg
Normal file
BIN
sounds/mobs_swing.ogg
Normal file
Binary file not shown.
50
spawner.lua
50
spawner.lua
@ -1,13 +1,18 @@
|
|||||||
|
|
||||||
|
-- intllib
|
||||||
|
local MP = minetest.get_modpath(minetest.get_current_modname())
|
||||||
|
local S, NS = dofile(MP .. "/intllib.lua")
|
||||||
|
|
||||||
-- mob spawner
|
-- mob spawner
|
||||||
|
|
||||||
local spawner_default = "mobs:pumba 10 15 0 0"
|
local spawner_default = "mobs_animal:pumba 10 15 0 0"
|
||||||
|
|
||||||
minetest.register_node("mobs:spawner", {
|
minetest.register_node("mobs:spawner", {
|
||||||
tiles = {"mob_spawner.png"},
|
tiles = {"mob_spawner.png"},
|
||||||
drawtype = "glasslike",
|
drawtype = "glasslike",
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
walkable = true,
|
walkable = true,
|
||||||
description = "Mob Spawner",
|
description = S("Mob Spawner"),
|
||||||
groups = {cracky = 1},
|
groups = {cracky = 1},
|
||||||
|
|
||||||
on_construct = function(pos)
|
on_construct = function(pos)
|
||||||
@ -15,8 +20,9 @@ minetest.register_node("mobs:spawner", {
|
|||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
|
|
||||||
-- text entry formspec
|
-- text entry formspec
|
||||||
meta:set_string("formspec", "field[text;Mob MinLight MaxLight Amount PlayerDist;${command}]")
|
meta:set_string("formspec",
|
||||||
meta:set_string("infotext", "Spawner Not Active (enter settings)")
|
"field[text;" .. S("Mob MinLight MaxLight Amount PlayerDist") .. ";${command}]")
|
||||||
|
meta:set_string("infotext", S("Spawner Not Active (enter settings)"))
|
||||||
meta:set_string("command", spawner_default)
|
meta:set_string("command", spawner_default)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
@ -47,27 +53,32 @@ minetest.register_node("mobs:spawner", {
|
|||||||
local xlig = tonumber(comm[3]) -- max light
|
local xlig = tonumber(comm[3]) -- max light
|
||||||
local num = tonumber(comm[4]) -- total mobs in area
|
local num = tonumber(comm[4]) -- total mobs in area
|
||||||
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]) -- 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] == true
|
||||||
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 > -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)
|
||||||
meta:set_string("infotext", "Spawner Active (" .. mob .. ")")
|
meta:set_string("infotext", S("Spawner Active (@1)", mob))
|
||||||
|
|
||||||
else
|
else
|
||||||
minetest.chat_send_player(name, "Mob Spawner settings failed!")
|
minetest.chat_send_player(name, S("Mob Spawner settings failed!"))
|
||||||
minetest.chat_send_player(name, "> name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] distance[1-20] y_offset[-10 to 10]")
|
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]”"))
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
local max_per_block = tonumber(minetest.settings:get("max_objects_per_block") or 99)
|
||||||
|
|
||||||
-- spawner abm
|
-- spawner abm
|
||||||
minetest.register_abm({
|
minetest.register_abm({
|
||||||
|
label = "Mob spawner node",
|
||||||
nodenames = {"mobs:spawner"},
|
nodenames = {"mobs:spawner"},
|
||||||
interval = 10,
|
interval = 10,
|
||||||
chance = 4,
|
chance = 4,
|
||||||
@ -75,8 +86,10 @@ minetest.register_abm({
|
|||||||
|
|
||||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||||
|
|
||||||
-- check objects inside 9x9 area around spawner
|
-- return if too many entities already
|
||||||
local objs = minetest.get_objects_inside_radius(pos, 9)
|
if active_object_count_wider >= max_per_block then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
-- get meta and command
|
-- get meta and command
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
@ -95,15 +108,23 @@ minetest.register_abm({
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- are we spawning a registered mob?
|
||||||
|
if not mobs.spawning_mobs[mob] then
|
||||||
|
--print ("--- mob doesn't exist", mob)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- check objects inside 9x9 area around spawner
|
||||||
|
local objs = minetest.get_objects_inside_radius(pos, 9)
|
||||||
local count = 0
|
local count = 0
|
||||||
local ent = nil
|
local ent = nil
|
||||||
|
|
||||||
-- count mob objects of same type in area
|
-- count mob objects of same type in area
|
||||||
for k, obj in pairs(objs) do
|
for k, obj in ipairs(objs) do
|
||||||
|
|
||||||
ent = obj:get_luaentity()
|
ent = obj:get_luaentity()
|
||||||
|
|
||||||
if ent and ent.name == mob then
|
if ent and ent.name and ent.name == mob then
|
||||||
count = count + 1
|
count = count + 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -150,7 +171,8 @@ minetest.register_abm({
|
|||||||
pos2.y = pos2.y + 0.5
|
pos2.y = pos2.y + 0.5
|
||||||
|
|
||||||
-- only if light levels are within range
|
-- only if light levels are within range
|
||||||
if lig >= mlig and lig <= xlig then
|
if lig >= mlig and lig <= xlig
|
||||||
|
and minetest.registered_entities[mob] then
|
||||||
minetest.add_entity(pos2, mob)
|
minetest.add_entity(pos2, mob)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
BIN
textures/mobs_noentry_particle.png
Normal file
BIN
textures/mobs_noentry_particle.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 165 B |
BIN
textures/mobs_protect_particle.png
Normal file
BIN
textures/mobs_protect_particle.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 117 B |
BIN
textures/mobs_protector.png
Normal file
BIN
textures/mobs_protector.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 164 B |
BIN
textures/mobs_saddle.png
Normal file
BIN
textures/mobs_saddle.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 166 B |
Reference in New Issue
Block a user