Merge https://notabug.org/TenPlus1/mobs_redo and resolve conflicts
This commit is contained in:
commit
fbe2d90251
3985
api.lua_testspawn
3985
api.lua_testspawn
File diff suppressed because it is too large
Load Diff
191
api.txt
191
api.txt
@ -31,12 +31,15 @@ functions needed for the mob to work properly which contains the following:
|
||||
'hp_max' has the maximum health value the mob can spawn with.
|
||||
'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,
|
||||
'passive' when false 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.
|
||||
'stand_chance' has a 0-100 chance value your mob will stand from walking.
|
||||
'walk_chance' has a 0-100 chance value your mob will walk from standing,
|
||||
set to 0 for jumping mobs only.
|
||||
'randomly_turn' if set to false then mob will not turn to face player or
|
||||
randomly turn while walking or standing.
|
||||
'jump' when true allows your mob to jump updwards.
|
||||
'jump_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,
|
||||
@ -44,6 +47,10 @@ functions needed for the mob to work properly which contains the following:
|
||||
'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".
|
||||
'keep_flying' when true mobs like birds no longer stop and stand.
|
||||
'stay_near' when set allows mobs the chance to stay around certain nodes.
|
||||
'nodes' string or table of nodes to stay nearby e.g. "farming:straw"
|
||||
'chance' chance of searching for above node(s), default is 10.
|
||||
'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.
|
||||
@ -57,13 +64,15 @@ functions needed for the mob to work properly which contains the following:
|
||||
'fall_damage' when true causes falling to inflict damage.
|
||||
'water_damage' holds the damage per second infliced to mobs when standing in
|
||||
water.
|
||||
'air_damage' holds damage per second inflicted to mob when standing in air.
|
||||
'lava_damage' holds the damage per second inflicted to mobs when standing
|
||||
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.
|
||||
'suffocation' when > 0 mobs will suffocate inside solid blocks and will be
|
||||
hurt by the value given every second (0 to disable).
|
||||
'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
|
||||
@ -83,6 +92,9 @@ functions needed for the mob to work properly which contains the following:
|
||||
punches when nearby.
|
||||
'group_attack' when true has same mob type grouping together to attack
|
||||
offender.
|
||||
'group_helper' string containing mob name that attacks alongside
|
||||
current mob when group attacking.
|
||||
mob is attacking in groups.
|
||||
'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.
|
||||
@ -154,6 +166,11 @@ functions needed for the mob to work properly which contains the following:
|
||||
'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.
|
||||
Note2: A function can now be passed which can also return drops table, e.g.
|
||||
drops = function(pos)
|
||||
-- do something
|
||||
return { {name = "farming:bread"}, {name = "default:dirt", chance = 2} }
|
||||
end
|
||||
|
||||
'visual' holds the look of the mob you wish to create:
|
||||
'cube' looks like a normal node
|
||||
@ -171,16 +188,20 @@ functions needed for the mob to work properly which contains the following:
|
||||
'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.
|
||||
'texture_mods' holds a string which overlays a texture on top of the
|
||||
mob texture e.g. "^saddle.png"
|
||||
'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.
|
||||
'glow' has mob glow without light source, 0 to 15 or nil to disable
|
||||
'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:
|
||||
'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.
|
||||
@ -206,6 +227,7 @@ functions needed for the mob to work properly which contains the following:
|
||||
'die_end'
|
||||
'die_speed'
|
||||
'die_loop' when set to false stops the animation looping.
|
||||
'die_rotate' if true mob spins during death animation.
|
||||
|
||||
Using '_loop = false' setting will stop any of the above animations from
|
||||
looping.
|
||||
@ -274,8 +296,13 @@ enhance mob functionality and have them do many interesting things:
|
||||
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)
|
||||
melee attack, parameters are (self, to_attack) and if true
|
||||
is returned normal attack function continued.
|
||||
'on_die' a function that is called when mob is killed (self, pos), also
|
||||
has access to self.cause_of_death table.
|
||||
'on_flop' function called when flying or swimmimng mob is no longer in
|
||||
air/water, (self) paramater and return true to skip the built
|
||||
in api flop feature.
|
||||
'do_custom' a custom function that is called every tick while mob is
|
||||
active and which has access to all of the self.* variables
|
||||
e.g. (self.health for health or self.standing_in for node
|
||||
@ -307,48 +334,84 @@ for each mob.
|
||||
'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
|
||||
'self.state' Current mob state.
|
||||
"stand": no movement (except turning around)
|
||||
"walk": walk or move around aimlessly
|
||||
"attack": chase and attack enemy
|
||||
"runaway": flee from target
|
||||
"flop": bounce around aimlessly
|
||||
(for swimming mobs that have stranded)
|
||||
"die": during death
|
||||
|
||||
|
||||
Adding Mobs in World
|
||||
--------------------
|
||||
|
||||
mobs:add_mob(pos, {
|
||||
name = "mobs_animal:chicken",
|
||||
child = true,
|
||||
owner = "singleplayer",
|
||||
nametag = "Bessy",
|
||||
ignore_count = true -- ignores mob count per map area
|
||||
})
|
||||
|
||||
Returns false if mob could not be added, returns mob object if spawned ok.
|
||||
|
||||
|
||||
Removing Mob from World
|
||||
-----------------------
|
||||
|
||||
mobs:remove(self, decrease)
|
||||
|
||||
Removes mob 'self' from the world and if 'decrease' is true then the mob counter
|
||||
will also be decreased by one.
|
||||
|
||||
|
||||
Spawning Mobs in World
|
||||
----------------------
|
||||
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:tree_monster",
|
||||
nodes = {"group:leaves"},
|
||||
max_light = 7,
|
||||
})
|
||||
|
||||
Spawn functions require the following settings, some of which already have a
|
||||
default setting and can be omitted:
|
||||
|
||||
'name' is the name of the animal/monster
|
||||
'nodes' is a list of nodenames on that the animal/monster can
|
||||
spawn on top of (defaults to {"group:dirt", "group:stone"}
|
||||
'neighbors' is a list of nodenames on that the animal/monster will
|
||||
spawn beside (default is {"air"})
|
||||
'interval' is same as in register_abm() (default is 30)
|
||||
'chance' is same as in register_abm() (default is 5000)
|
||||
'min_light' is the minimum light level (default is 0)
|
||||
'max_light' is the maximum light (default is 15)
|
||||
'min_height' is the minimum height a mob can spawn (default: -31000)
|
||||
'max_height' is the maximum height a mob can spawn (default is 31000)
|
||||
'active_object_count' number of this type of mob to spawn at one time inside
|
||||
map area (default is 1)
|
||||
'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.
|
||||
'on_map_load' when true mobs will have a chance of spawning only
|
||||
when new areas of map are loaded, interval will not be
|
||||
used.
|
||||
|
||||
The older spawn functions are still active and working but have no defaults like
|
||||
the mobs:spawn, so it is recommended to use the above instead.
|
||||
|
||||
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
|
||||
@ -367,6 +430,24 @@ true the mob will not spawn.
|
||||
'name' is the name of the animal/monster
|
||||
|
||||
|
||||
Particle Effects
|
||||
----------------
|
||||
|
||||
mobs:effect(pos, amount, texture, min_size, max_size, radius, gravity, glow, fall)
|
||||
|
||||
This function provides a quick way to spawn particles as an effect.
|
||||
|
||||
'pos' center position of particle effect.
|
||||
'amount' how many particles.
|
||||
'texture' texture filename to use for effect.
|
||||
'min_size' smallest particle size.
|
||||
'max_size' largest particle size.
|
||||
'radius' how far particles spread outward from center.
|
||||
'gravity' gravity applied to particles once they spawn.
|
||||
'glow' number between 1 and 15 for glowing particles.
|
||||
'fall' when true particles fall, false has them rising, nil has them scatter.
|
||||
|
||||
|
||||
Making Arrows
|
||||
-------------
|
||||
|
||||
@ -387,6 +468,8 @@ This function registers a arrow for mobs with the attack type shoot.
|
||||
'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_object' a function that is called when the arrow hits an object;
|
||||
this function 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
|
||||
@ -400,7 +483,9 @@ This function registers a arrow for mobs with the attack type shoot.
|
||||
'on_step' is a custom function when arrow is active, nil for
|
||||
default.
|
||||
'on_punch' is a custom function when arrow is punched, nil by default
|
||||
'collisionbox' is hitbox table for arrow, {0,0,0,0,0,0} by default.
|
||||
'collisionbox' is hitbox table for arrow, {-.1,-.1,-.1,.1,.1,.1} by default.
|
||||
'lifetime' contains float value for how many seconds arrow exists in
|
||||
world before being removed (default is 4.5 seconds).
|
||||
|
||||
|
||||
Spawn Eggs
|
||||
@ -408,7 +493,8 @@ 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.
|
||||
This function registers a spawn egg which can be used to properly spawn in a mob.
|
||||
Animals are spawned as tamed unless sneak/shift is held while spawning.
|
||||
|
||||
'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"
|
||||
@ -455,6 +541,11 @@ replace with another item entirely.
|
||||
'replacewith' once captured replace mob with this item instead (overrides
|
||||
new mob eggs with saved information)
|
||||
|
||||
mobs:force_capture(self, clicker)
|
||||
|
||||
Same as above but does no checks, it simply captures any and all mobs and places
|
||||
inside a spawn egg containing all of the mob information.
|
||||
|
||||
|
||||
Feeding and Taming/Breeding
|
||||
---------------------------
|
||||
@ -567,7 +658,7 @@ Certain variables need to be set before using the above functions:
|
||||
'self.driver_scale' sets driver scale for mobs larger than {x=1, y=1}
|
||||
|
||||
|
||||
mobs:line_of_sight(self, pos1, pos2, stepsize)
|
||||
mobs:line_of_sight(self, pos1, pos2, stepsize) [DEPRECATED]
|
||||
|
||||
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.
|
||||
@ -577,6 +668,17 @@ returns true if a mob can see the player or victim.
|
||||
'pos2' position of vistim or player
|
||||
'stepsize' usually set to 1
|
||||
|
||||
Use this instead:
|
||||
|
||||
mob_class:line_of_sight(pos1, pos2, stepsize)
|
||||
|
||||
|
||||
mobs:can_spawn(pos, name)
|
||||
|
||||
This function checks the surrounding area at [pos] to see if there is enough empty
|
||||
space to spawn mob [name], if so then a new position is returned for use,
|
||||
otherwise nil is returned.
|
||||
|
||||
|
||||
External Settings for "minetest.conf"
|
||||
------------------------------------
|
||||
@ -606,13 +708,24 @@ External Settings for "minetest.conf"
|
||||
'mobs_griefing' when false mobs cannot break blocks when using either
|
||||
pathfinding level 2, replace functions or mobs:boom
|
||||
function.
|
||||
'mob_nospawn_range' Minimum range a mob can spawn near player (def: 12)
|
||||
'mob_active_limit' Number of active mobs in game, 0 for unlimited
|
||||
'mob_area_spawn' When true will check surrounding area the size of the
|
||||
mob for obstructions before spawning, otherwise it
|
||||
defaults to checking the height of the mob only.
|
||||
|
||||
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
|
||||
mobs_animal:sheep 11000
|
||||
mobs_monster:sand_monster 100
|
||||
|
||||
...you can also change how many of a certain mob appear in an active mapblock by
|
||||
adding a comma and then a new value e.g.
|
||||
|
||||
mobs_animal:cow = 8000,4 <-- 4 cows per mapblock at 8000 spawn chance
|
||||
mobs_monster:dirt_monster = ,20 <-- 20 dirt monsters per mapblock
|
||||
|
||||
|
||||
Rideable Horse Example Mob
|
||||
@ -723,7 +836,7 @@ mobs:register_mob("mob_horse:horse", {
|
||||
if inv:room_for_item("main", "mobs:saddle") then
|
||||
inv:add_item("main", "mobs:saddle")
|
||||
else
|
||||
minetest.add_item(clicker.getpos(), "mobs:saddle")
|
||||
minetest.add_item(clicker.get_pos(), "mobs:saddle")
|
||||
end
|
||||
|
||||
-- attach player to horse
|
||||
|
282
crafts.lua
282
crafts.lua
@ -5,14 +5,14 @@ local S = mobs.intllib
|
||||
minetest.register_craftitem("mobs:nametag", {
|
||||
description = S("Name Tag"),
|
||||
inventory_image = "mobs_nametag.png",
|
||||
groups = {flammable = 2},
|
||||
groups = {flammable = 2, nametag = 1}
|
||||
})
|
||||
|
||||
if minetest.get_modpath("dye") and minetest.get_modpath("farming") then
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = "mobs:nametag",
|
||||
recipe = {"default:paper", "dye:black", "farming:string"},
|
||||
recipe = {"default:paper", "dye:black", "farming:string"}
|
||||
})
|
||||
end
|
||||
|
||||
@ -20,7 +20,7 @@ end
|
||||
minetest.register_craftitem("mobs:leather", {
|
||||
description = S("Leather"),
|
||||
inventory_image = "mobs_leather.png",
|
||||
groups = {flammable = 2},
|
||||
groups = {flammable = 2, leather = 1}
|
||||
})
|
||||
|
||||
-- raw meat
|
||||
@ -28,7 +28,7 @@ minetest.register_craftitem("mobs:meat_raw", {
|
||||
description = S("Raw Meat"),
|
||||
inventory_image = "mobs_meat_raw.png",
|
||||
on_use = minetest.item_eat(3),
|
||||
groups = {food_meat_raw = 1, flammable = 2},
|
||||
groups = {food_meat_raw = 1, flammable = 2}
|
||||
})
|
||||
|
||||
-- cooked meat
|
||||
@ -36,21 +36,21 @@ minetest.register_craftitem("mobs:meat", {
|
||||
description = S("Meat"),
|
||||
inventory_image = "mobs_meat.png",
|
||||
on_use = minetest.item_eat(8),
|
||||
groups = {food_meat = 1, flammable = 2},
|
||||
groups = {food_meat = 1, flammable = 2}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "mobs:meat",
|
||||
recipe = "mobs:meat_raw",
|
||||
cooktime = 5,
|
||||
cooktime = 5
|
||||
})
|
||||
|
||||
-- lasso
|
||||
minetest.register_tool("mobs:lasso", {
|
||||
description = S("Lasso (right-click animal to put in inventory)"),
|
||||
inventory_image = "mobs_magic_lasso.png",
|
||||
groups = {flammable = 2},
|
||||
groups = {flammable = 2}
|
||||
})
|
||||
|
||||
if minetest.get_modpath("farming") then
|
||||
@ -59,7 +59,7 @@ if minetest.get_modpath("farming") then
|
||||
recipe = {
|
||||
{"farming:string", "", "farming:string"},
|
||||
{"", "default:diamond", ""},
|
||||
{"farming:string", "", "farming:string"},
|
||||
{"farming:string", "", "farming:string"}
|
||||
}
|
||||
})
|
||||
end
|
||||
@ -70,7 +70,7 @@ minetest.register_alias("mobs:magic_lasso", "mobs:lasso")
|
||||
minetest.register_tool("mobs:net", {
|
||||
description = S("Net (right-click animal to put in inventory)"),
|
||||
inventory_image = "mobs_net.png",
|
||||
groups = {flammable = 2},
|
||||
groups = {flammable = 2}
|
||||
})
|
||||
|
||||
if minetest.get_modpath("farming") then
|
||||
@ -79,7 +79,7 @@ if minetest.get_modpath("farming") then
|
||||
recipe = {
|
||||
{"group:stick", "", "group:stick"},
|
||||
{"group:stick", "", "group:stick"},
|
||||
{"farming:string", "group:stick", "farming:string"},
|
||||
{"farming:string", "group:stick", "farming:string"}
|
||||
}
|
||||
})
|
||||
end
|
||||
@ -88,14 +88,14 @@ end
|
||||
minetest.register_tool("mobs:shears", {
|
||||
description = S("Steel Shears (right-click to shear)"),
|
||||
inventory_image = "mobs_shears.png",
|
||||
groups = {flammable = 2},
|
||||
groups = {flammable = 2}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'mobs:shears',
|
||||
output = "mobs:shears",
|
||||
recipe = {
|
||||
{'', 'default:steel_ingot', ''},
|
||||
{'', 'group:stick', 'default:steel_ingot'},
|
||||
{"", "default:steel_ingot", ""},
|
||||
{"", "group:stick", "default:steel_ingot"}
|
||||
}
|
||||
})
|
||||
|
||||
@ -103,7 +103,7 @@ minetest.register_craft({
|
||||
minetest.register_craftitem("mobs:protector", {
|
||||
description = S("Mob Protection Rune"),
|
||||
inventory_image = "mobs_protector.png",
|
||||
groups = {flammable = 2},
|
||||
groups = {flammable = 2}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
@ -111,7 +111,7 @@ minetest.register_craft({
|
||||
recipe = {
|
||||
{"default:stone", "default:stone", "default:stone"},
|
||||
{"default:stone", "default:goldblock", "default:stone"},
|
||||
{"default:stone", "default:stone", "default:stone"},
|
||||
{"default:stone", "default:stone", "default:stone"}
|
||||
}
|
||||
})
|
||||
|
||||
@ -119,7 +119,7 @@ minetest.register_craft({
|
||||
minetest.register_craftitem("mobs:saddle", {
|
||||
description = S("Saddle"),
|
||||
inventory_image = "mobs_saddle.png",
|
||||
groups = {flammable = 2},
|
||||
groups = {flammable = 2, saddle = 1}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
@ -127,95 +127,229 @@ minetest.register_craft({
|
||||
recipe = {
|
||||
{"mobs:leather", "mobs:leather", "mobs:leather"},
|
||||
{"mobs:leather", "default:steel_ingot", "mobs:leather"},
|
||||
{"mobs:leather", "default:steel_ingot", "mobs:leather"},
|
||||
{"mobs:leather", "default:steel_ingot", "mobs:leather"}
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
-- make sure we can register fences
|
||||
if default.register_fence then
|
||||
|
||||
-- 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},
|
||||
-- },
|
||||
-- },
|
||||
-- })
|
||||
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_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", ""}
|
||||
}
|
||||
})
|
||||
|
||||
end
|
||||
|
||||
-- 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,
|
||||
burntime = 3
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "mobs:lasso",
|
||||
burntime = 7,
|
||||
burntime = 7
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "mobs:net",
|
||||
burntime = 8,
|
||||
burntime = 8
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "mobs:leather",
|
||||
burntime = 4,
|
||||
burntime = 4
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "mobs:saddle",
|
||||
burntime = 7,
|
||||
burntime = 7
|
||||
})
|
||||
|
||||
-- minetest.register_craft({
|
||||
-- type = "fuel",
|
||||
-- recipe = "mobs:fence_wood",
|
||||
-- burntime = 7,
|
||||
-- })
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "mobs:fence_wood",
|
||||
burntime = 7
|
||||
})
|
||||
|
||||
-- minetest.register_craft({
|
||||
-- type = "fuel",
|
||||
-- recipe = "mobs:fence_top",
|
||||
-- burntime = 2,
|
||||
-- })
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "mobs:fence_top",
|
||||
burntime = 2
|
||||
})
|
||||
|
||||
|
||||
-- this tool spawns same mob and adds owner, protected, nametag info
|
||||
-- then removes original entity, this is used for fixing any issues.
|
||||
|
||||
local tex_obj
|
||||
|
||||
minetest.register_tool(":mobs:mob_reset_stick", {
|
||||
description = S("Mob Reset Stick"),
|
||||
inventory_image = "default_stick.png^[colorize:#ff000050",
|
||||
stack_max = 1,
|
||||
groups = {not_in_creative_inventory = 1},
|
||||
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
|
||||
if pointed_thing.type ~= "object" then
|
||||
return
|
||||
end
|
||||
|
||||
local obj = pointed_thing.ref
|
||||
|
||||
local control = user:get_player_control()
|
||||
local sneak = control and control.sneak
|
||||
|
||||
-- spawn same mob with saved stats, with random texture
|
||||
if obj and not sneak then
|
||||
|
||||
local self = obj:get_luaentity()
|
||||
local obj2 = minetest.add_entity(obj:get_pos(), self.name)
|
||||
|
||||
if obj2 then
|
||||
|
||||
local ent2 = obj2:get_luaentity()
|
||||
|
||||
ent2.protected = self.protected
|
||||
ent2.owner = self.owner
|
||||
ent2.nametag = self.nametag
|
||||
ent2.gotten = self.gotten
|
||||
ent2.tamed = self.tamed
|
||||
ent2.health = self.health
|
||||
ent2.order = self.order
|
||||
|
||||
if self.child then
|
||||
obj2:set_velocity({x = 0, y = self.jump_height, z = 0})
|
||||
end
|
||||
|
||||
obj2:set_properties({nametag = self.nametag})
|
||||
|
||||
obj:remove()
|
||||
end
|
||||
end
|
||||
|
||||
-- display form to enter texture name ending in .png
|
||||
if obj and sneak then
|
||||
|
||||
tex_obj = obj
|
||||
|
||||
local name = user:get_player_name()
|
||||
local tex = ""
|
||||
|
||||
minetest.show_formspec(name, "mobs_texture", "size[8,4]"
|
||||
.. "field[0.5,1;7.5,0;name;"
|
||||
.. minetest.formspec_escape(S("Enter texture:")) .. ";" .. tex .. "]"
|
||||
.. "button_exit[2.5,3.5;3,1;mob_texture_change;"
|
||||
.. minetest.formspec_escape(S("Change")) .. "]")
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
|
||||
-- right-clicked with nametag and name entered?
|
||||
if formname == "mobs_texture"
|
||||
and fields.name
|
||||
and fields.name ~= "" then
|
||||
|
||||
-- does mob still exist?
|
||||
if not tex_obj
|
||||
or not tex_obj:get_luaentity() then
|
||||
return
|
||||
end
|
||||
|
||||
-- make sure nametag is being used to name mob
|
||||
local item = player:get_wielded_item()
|
||||
|
||||
if item:get_name() ~= "mobs:mob_reset_stick" then
|
||||
return
|
||||
end
|
||||
|
||||
-- limit name entered to 64 characters long
|
||||
if fields.name:len() > 64 then
|
||||
fields.name = fields.name:sub(1, 64)
|
||||
end
|
||||
|
||||
-- update texture
|
||||
local self = tex_obj:get_luaentity()
|
||||
|
||||
self.base_texture = {fields.name}
|
||||
|
||||
tex_obj:set_properties({textures = {fields.name}})
|
||||
|
||||
-- reset external variable
|
||||
tex_obj = nil
|
||||
end
|
||||
end)
|
||||
|
||||
|
||||
-- Meat Block (thanks to painterlypack.net for allowing me to use these textures)
|
||||
minetest.register_node("mobs:meatblock", {
|
||||
description = S("Meat Block"),
|
||||
tiles = {"mobs_meat_top.png", "mobs_meat_bottom.png", "mobs_meat_side.png"},
|
||||
paramtype2 = "facedir",
|
||||
groups = {choppy = 1, oddly_breakable_by_hand = 1, flammable = 2},
|
||||
sounds = default.node_sound_leaves_defaults(),
|
||||
on_place = minetest.rotate_node,
|
||||
on_use = minetest.item_eat(20),
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mobs:meatblock",
|
||||
type = "shapeless",
|
||||
recipe = {
|
||||
"group:food_meat", "group:food_meat", "group:food_meat",
|
||||
"group:food_meat", "group:food_meat", "group:food_meat",
|
||||
"group:food_meat", "group:food_meat", "group:food_meat"
|
||||
}
|
||||
})
|
||||
|
6
init.lua
6
init.lua
@ -1,6 +1,12 @@
|
||||
|
||||
local path = minetest.get_modpath("mobs")
|
||||
|
||||
-- Peaceful player privilege
|
||||
minetest.register_privilege("peaceful_player", {
|
||||
description = "Prevents Mobs Redo mobs from attacking player",
|
||||
give_to_singleplayer = false
|
||||
})
|
||||
|
||||
-- Mob API
|
||||
dofile(path .. "/api.lua")
|
||||
|
||||
|
46
intllib.lua
46
intllib.lua
@ -1,45 +1,3 @@
|
||||
-- Support for the old multi-load method
|
||||
dofile(minetest.get_modpath("intllib").."/init.lua")
|
||||
|
||||
-- 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
|
||||
|
23
locale/fr.po
23
locale/fr.po
@ -3,20 +3,19 @@
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
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"
|
||||
"PO-Revision-Date: 2020-08-13 21:20+0500\n"
|
||||
"Last-Translator: Olivier Dragon <odragon@protonmail.com>\n"
|
||||
"Language-Team: \n"
|
||||
"Language: fr\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"
|
||||
@ -64,7 +63,7 @@ msgstr "Renommer"
|
||||
|
||||
#: crafts.lua
|
||||
msgid "Name Tag"
|
||||
msgstr "Étiquette pour collier"
|
||||
msgstr "Étiquette de collier"
|
||||
|
||||
#: crafts.lua
|
||||
msgid "Leather"
|
||||
@ -102,18 +101,26 @@ msgstr "Selle"
|
||||
msgid "Mob Fence"
|
||||
msgstr "Clôture à animaux"
|
||||
|
||||
#: crafts.lua
|
||||
msgid "Mob Fence Top"
|
||||
msgstr "Haut de 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"
|
||||
msgid "(mob name) (min light) (max light) (amount) (player distance) (Y offset)"
|
||||
msgstr "(Nom) (MinLumière) (MaxLumière) (Quantité) (Distance du Joueur) (Décalage en Y)"
|
||||
|
||||
#: spawner.lua
|
||||
msgid "Spawner Not Active (enter settings)"
|
||||
msgstr "Générateur non actif (entrez les paramètres)"
|
||||
|
||||
#: spawner.lua
|
||||
msgid "Command:"
|
||||
msgstr "Commande:"
|
||||
|
||||
#: spawner.lua
|
||||
msgid "Spawner Active (@1)"
|
||||
msgstr "Générateur actif (@1)"
|
||||
|
26
locale/it.po
26
locale/it.po
@ -8,19 +8,19 @@ 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"
|
||||
"PO-Revision-Date: 2020-05-11 13:33+0200\n"
|
||||
"Last-Translator: Hamlet <hamlatgitlab@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"
|
||||
"X-Generator: Poedit 2.2.1\n"
|
||||
|
||||
#: api.lua
|
||||
msgid "** Peaceful Mode Active - No Monsters Will Spawn"
|
||||
msgstr ""
|
||||
msgstr "** Modalità pacifica attiva - non comparirà nessun mostro"
|
||||
|
||||
#: api.lua
|
||||
msgid "Mob has been protected!"
|
||||
@ -28,23 +28,23 @@ msgstr "Il mob è stato protetto!"
|
||||
|
||||
#: api.lua
|
||||
msgid "@1 (Tamed)"
|
||||
msgstr "@1 (Addomesticat*)"
|
||||
msgstr "@1 (Addomesticato)"
|
||||
|
||||
#: api.lua
|
||||
msgid "Not tamed!"
|
||||
msgstr "Non addomesticat*!"
|
||||
msgstr "Non addomesticato!"
|
||||
|
||||
#: api.lua
|
||||
msgid "@1 is owner!"
|
||||
msgstr "Proprietari* @1!"
|
||||
msgstr "Il padrone è @1!"
|
||||
|
||||
#: api.lua
|
||||
msgid "Missed!"
|
||||
msgstr "Mancat*!"
|
||||
msgstr "Mancato!"
|
||||
|
||||
#: api.lua
|
||||
msgid "Already protected!"
|
||||
msgstr "Già protett*!"
|
||||
msgstr "Già protetto!"
|
||||
|
||||
#: api.lua
|
||||
msgid "@1 at full health (@2)"
|
||||
@ -52,7 +52,7 @@ msgstr "@1 in piena salute (@2)"
|
||||
|
||||
#: api.lua
|
||||
msgid "@1 has been tamed!"
|
||||
msgstr "@1 è stat* addomesticat*!"
|
||||
msgstr "@1 è stato addomesticato!"
|
||||
|
||||
#: api.lua
|
||||
msgid "Enter name:"
|
||||
@ -60,7 +60,7 @@ msgstr "Inserire il nome:"
|
||||
|
||||
#: api.lua
|
||||
msgid "Rename"
|
||||
msgstr "Rinominare"
|
||||
msgstr "Rinomina"
|
||||
|
||||
#: crafts.lua
|
||||
msgid "Name Tag"
|
||||
@ -100,7 +100,7 @@ msgstr "Sella"
|
||||
|
||||
#: crafts.lua
|
||||
msgid "Mob Fence"
|
||||
msgstr ""
|
||||
msgstr "Recinzione per mob"
|
||||
|
||||
#: spawner.lua
|
||||
msgid "Mob Spawner"
|
||||
@ -128,4 +128,4 @@ msgid ""
|
||||
"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]”"
|
||||
"disabilitare] distance[1-20] y_offset[-10 fino a 10]”"
|
||||
|
34
locale/mobs.de_DE.tr
Normal file
34
locale/mobs.de_DE.tr
Normal file
@ -0,0 +1,34 @@
|
||||
# textdomain:mobs
|
||||
#** Peaceful Mode Active - No Monsters Will Spawn=
|
||||
@1 (Tamed)=@1 (Gezähmt)
|
||||
@1 at full health (@2)=@1 bei voller Gesundheit (@2)
|
||||
@1 has been tamed!=@1 wurde gezähmt!
|
||||
@1 is owner!=@1 ist der Besitzer!
|
||||
#Active Mob Limit Reached!=
|
||||
Already protected!=Bereits geschützt!
|
||||
#Change=
|
||||
#Command:=
|
||||
Enter name:=Namen eingeben:
|
||||
#Enter texture:=
|
||||
Lasso (right-click animal to put in inventory)=Lasso (Rechtsklick auf Tier, um es zu nehmen)
|
||||
Leather=Leder
|
||||
Meat=Fleisch
|
||||
Missed!=Daneben!
|
||||
Mob Fence=Kreaturen Zaun
|
||||
#Mob Fence Top=
|
||||
Mob Protection Rune=Kreaturschutzrune
|
||||
#Mob Reset Stick=
|
||||
#Mob Spawner=
|
||||
Mob Spawner settings failed!=Kreaturenspawner-Einstellungen gescheitert!
|
||||
Mob has been protected!=Kreatur wurde geschützt!
|
||||
Name Tag=Namensschild
|
||||
Net (right-click animal to put in inventory)=Netz (Rechtsklick auf Tier, um es zu nehmen)
|
||||
Not tamed!=Nicht gezähmt!
|
||||
Raw Meat=Rohes Fleisch
|
||||
Rename=Umbenennen
|
||||
Saddle=Sattel
|
||||
Spawner Active (@1)=Spawner aktiv (@1)
|
||||
Spawner Not Active (enter settings)=Nicht aktiv (Einstellungen eingeben)
|
||||
Steel Shears (right-click to shear)=Stahlschere (Rechtsklick zum Scheren)
|
||||
#Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] player_distance[1-20] y_offset[-10 to 10]”=
|
||||
#lifetimer expired, removed @1=
|
34
locale/mobs.en.tr
Normal file
34
locale/mobs.en.tr
Normal file
@ -0,0 +1,34 @@
|
||||
# textdomain:mobs
|
||||
#** Peaceful Mode Active - No Monsters Will Spawn=
|
||||
#@1 (Tamed)=
|
||||
#@1 at full health (@2)=
|
||||
#@1 has been tamed!=
|
||||
#@1 is owner!=
|
||||
#Active Mob Limit Reached!=
|
||||
#Already protected!=
|
||||
#Change=
|
||||
#Command:=
|
||||
#Enter name:=
|
||||
#Enter texture:=
|
||||
#Lasso (right-click animal to put in inventory)=
|
||||
#Leather=
|
||||
#Meat=
|
||||
#Missed!=
|
||||
#Mob Fence=
|
||||
#Mob Fence Top=
|
||||
#Mob Protection Rune=
|
||||
#Mob Reset Stick=
|
||||
#Mob Spawner=
|
||||
#Mob Spawner settings failed!=
|
||||
#Mob has been protected!=
|
||||
#Name Tag=
|
||||
#Net (right-click animal to put in inventory)=
|
||||
#Not tamed!=
|
||||
#Raw Meat=
|
||||
#Rename=
|
||||
#Saddle=
|
||||
#Spawner Active (@1)=
|
||||
#Spawner Not Active (enter settings)=
|
||||
#Steel Shears (right-click to shear)=
|
||||
#Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] player_distance[1-20] y_offset[-10 to 10]”=
|
||||
#lifetimer expired, removed @1=
|
34
locale/mobs.es.tr
Normal file
34
locale/mobs.es.tr
Normal file
@ -0,0 +1,34 @@
|
||||
# textdomain:mobs
|
||||
#** Peaceful Mode Active - No Monsters Will Spawn=
|
||||
@1 (Tamed)=@1 (Domesticado)
|
||||
@1 at full health (@2)=@1 con salud llena (@2)
|
||||
@1 has been tamed!=@1 ha sido domesticado!
|
||||
@1 is owner!=@1 es el dueño!
|
||||
#Active Mob Limit Reached!=
|
||||
Already protected!=Ya está protegido!
|
||||
#Change=
|
||||
#Command:=
|
||||
Enter name:=Ingrese nombre:
|
||||
#Enter texture:=
|
||||
Lasso (right-click animal to put in inventory)=Lazo (click derecho en animal para colocar en inventario)
|
||||
Leather=Cuero
|
||||
Meat=Carne
|
||||
Missed!=Perdido!
|
||||
#Mob Fence=
|
||||
#Mob Fence Top=
|
||||
Mob Protection Rune=Runa de protección de Mob
|
||||
#Mob Reset Stick=
|
||||
#Mob Spawner=
|
||||
Mob Spawner settings failed!=Configuracion de generador de Mob falló!
|
||||
Mob has been protected!=El mob ha sido protegido!
|
||||
Name Tag=Nombrar etiqueta
|
||||
Net (right-click animal to put in inventory)=Red (click derecho en animal para colocar en inventario)
|
||||
Not tamed!=No domesticado!
|
||||
Raw Meat=Carne cruda
|
||||
Rename=Renombrar
|
||||
Saddle=Montura
|
||||
Spawner Active (@1)=Generador activo (@1)
|
||||
Spawner Not Active (enter settings)=Generador no activo (ingrese config)
|
||||
Steel Shears (right-click to shear)=Tijera de acero (click derecho para esquilar)
|
||||
#Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] player_distance[1-20] y_offset[-10 to 10]”=
|
||||
#lifetimer expired, removed @1=
|
34
locale/mobs.fr.tr
Normal file
34
locale/mobs.fr.tr
Normal file
@ -0,0 +1,34 @@
|
||||
# textdomain:mobs
|
||||
** Peaceful Mode Active - No Monsters Will Spawn=** Mode pacifique activé - aucun monstre ne sera généré
|
||||
@1 (Tamed)=@1 (apprivoisé)
|
||||
@1 at full health (@2)=@1 est en pleine forme (@2)
|
||||
@1 has been tamed!=@1 a été apprivoisé !
|
||||
@1 is owner!=Appartient à @1 !
|
||||
Active Mob Limit Reached!=Limite atteinte du nombre des êtres vivants actifs !
|
||||
Already protected!=Déjà protégé !
|
||||
Change=Changer
|
||||
Command:=Commande :
|
||||
Enter name:=Saisissez un nom :
|
||||
Enter texture:=Saisissez une texture :
|
||||
Lasso (right-click animal to put in inventory)=Lasso (clic droit sur l'animal pour le mettre dans l'inventaire)
|
||||
Leather=Cuir
|
||||
Meat=Viande
|
||||
Missed!=Raté !
|
||||
Mob Fence= Clôture à animaux
|
||||
Mob Fence Top=Haut de clôture à animaux
|
||||
Mob Protection Rune=Rune de protection des animaux
|
||||
Mob Reset Stick=Baguette de réinitialisation des êtres vivants
|
||||
Mob Spawner=Créateur d'êtres vivants
|
||||
Mob Spawner settings failed!=Échec des paramètres du créateur d'être vivants !
|
||||
Mob has been protected!=L'animal a été protégé !
|
||||
Name Tag=Étiquette de collier
|
||||
Net (right-click animal to put in inventory)=Filet (clic droit sur l'animal pour le mettre dans l'inventaire)
|
||||
Not tamed!=Non-apprivoisé !
|
||||
Raw Meat=Viande crue
|
||||
Rename=Renommer
|
||||
Saddle=Selle
|
||||
Spawner Active (@1)=Créateur actif (@1)
|
||||
Spawner Not Active (enter settings)=Créateur non actif (entrez les paramètres)
|
||||
Steel Shears (right-click to shear)=Ciseaux à laine (clic droit pour tondre)
|
||||
Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] player_distance[1-20] y_offset[-10 to 10]”=Syntaxe : «name min_lumière[0-14] max_lumière[0-14] max_être_vivant_dans_région[0 pour désactiver] distance_joueur[1-20] décalage_y[-10 to 10]»
|
||||
lifetimer expired, removed @1=Être immortel expiré ; @1 retiré
|
34
locale/mobs.it.tr
Normal file
34
locale/mobs.it.tr
Normal file
@ -0,0 +1,34 @@
|
||||
# textdomain:mobs
|
||||
** Peaceful Mode Active - No Monsters Will Spawn=** Modalità pacifica attiva - non comparirà nessun mostro
|
||||
@1 (Tamed)=@1 (Addomesticato)
|
||||
@1 at full health (@2)=@1 in piena salute (@2)
|
||||
@1 has been tamed!=@1 è stato addomesticato!
|
||||
@1 is owner!=Il padrone è @1!
|
||||
#Active Mob Limit Reached!=
|
||||
Already protected!=Già protetto!
|
||||
#Change=
|
||||
#Command:=
|
||||
Enter name:=Inserire il nome:
|
||||
#Enter texture:=
|
||||
Lasso (right-click animal to put in inventory)=Lazo (click di destro per mettere l'animale nell'inventario)
|
||||
Leather=Pelle
|
||||
Meat=Carne
|
||||
Missed!=Mancato!
|
||||
Mob Fence=Recinzione per mob
|
||||
#Mob Fence Top=
|
||||
Mob Protection Rune=Runa di protezione per mob
|
||||
#Mob Reset Stick=
|
||||
#Mob Spawner=
|
||||
Mob Spawner settings failed!=Impostazioni del generatore di mob fallite!
|
||||
Mob has been protected!=Il mob è stato protetto!
|
||||
Name Tag=Targhetta
|
||||
Net (right-click animal to put in inventory)=Rete (click destro per mettere l'animale nell'inventario)
|
||||
Not tamed!=Non addomesticato!
|
||||
Raw Meat=Carne cruda
|
||||
Rename=Rinomina
|
||||
Saddle=Sella
|
||||
Spawner Active (@1)=Generatore attivo (@1)
|
||||
Spawner Not Active (enter settings)=Generatore inattivo (inserire le impostazioni)
|
||||
Steel Shears (right-click to shear)=Cesoie d'acciaio (click destro per tosare)
|
||||
#Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] player_distance[1-20] y_offset[-10 to 10]”=
|
||||
#lifetimer expired, removed @1=
|
34
locale/mobs.ms.tr
Normal file
34
locale/mobs.ms.tr
Normal file
@ -0,0 +1,34 @@
|
||||
# textdomain:mobs
|
||||
** Peaceful Mode Active - No Monsters Will Spawn=** Mod Aman Diaktifkan - Tiada Raksasa Akan Muncul
|
||||
@1 (Tamed)=@1 (Jinak)
|
||||
@1 at full health (@2)=Mata kesihatan @1 telah penuh (@2)
|
||||
@1 has been tamed!=@1 telah dijinakkan!
|
||||
@1 is owner!=Ini hak milik @1!
|
||||
#Active Mob Limit Reached!=
|
||||
Already protected!=Telah dilindungi!
|
||||
#Change=
|
||||
#Command:=
|
||||
Enter name:=Masukkan nama:
|
||||
#Enter texture:=
|
||||
Lasso (right-click animal to put in inventory)=Tanjul (klik-kanan haiwan untuk masukkan ke inventori)
|
||||
Leather=Kulit
|
||||
Meat=Daging Bakar
|
||||
Missed!=Terlepas!
|
||||
Mob Fence=Pagar Mob
|
||||
#Mob Fence Top=
|
||||
Mob Protection Rune=Rune Perlindungan Mob
|
||||
#Mob Reset Stick=
|
||||
#Mob Spawner=
|
||||
Mob Spawner settings failed!=Penetapan Pewujud Mob gagal!
|
||||
Mob has been protected!=Mob telah pun dilindungi!
|
||||
Name Tag=Tanda Nama
|
||||
Net (right-click animal to put in inventory)=Jaring (klik-kanan haiwan untuk masukkan ke inventori)
|
||||
Not tamed!=Belum dijinakkan!
|
||||
Raw Meat=Daging Mentah
|
||||
Rename=Namakan semula
|
||||
Saddle=Pelana
|
||||
Spawner Active (@1)=Pewujud Mob Aktif (@1)
|
||||
Spawner Not Active (enter settings)=Pewujud Mob Tidak Aktif (masukkan tetapan)
|
||||
Steel Shears (right-click to shear)=Ketam Keluli (klik-kanan untuk mengetam bulu biri-biri)
|
||||
#Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] player_distance[1-20] y_offset[-10 to 10]”=
|
||||
#lifetimer expired, removed @1=
|
34
locale/mobs.pt.tr
Normal file
34
locale/mobs.pt.tr
Normal file
@ -0,0 +1,34 @@
|
||||
# textdomain:mobs
|
||||
#** Peaceful Mode Active - No Monsters Will Spawn=
|
||||
#@1 (Tamed)=
|
||||
@1 at full health (@2)=@1 em plena saude (@2)
|
||||
@1 has been tamed!=@1 foi domesticado!
|
||||
@1 is owner!=Dono @1!
|
||||
#Active Mob Limit Reached!=
|
||||
#Already protected!=
|
||||
#Change=
|
||||
#Command:=
|
||||
Enter name:=Insira um nome:
|
||||
#Enter texture:=
|
||||
Lasso (right-click animal to put in inventory)=Laço (clique-direito no animal para por no inventario)
|
||||
Leather=Couro
|
||||
Meat=Carne
|
||||
Missed!=Faltou!
|
||||
#Mob Fence=
|
||||
#Mob Fence Top=
|
||||
#Mob Protection Rune=
|
||||
#Mob Reset Stick=
|
||||
#Mob Spawner=
|
||||
Mob Spawner settings failed!=Configuraçao de Spawnador do Mob falhou!
|
||||
#Mob has been protected!=
|
||||
Name Tag=Etiqueta
|
||||
Net (right-click animal to put in inventory)=Net (clique-direito no animal para por no inventario)
|
||||
Not tamed!=Indomesticado!
|
||||
Raw Meat=Carne crua
|
||||
Rename=Renomear
|
||||
#Saddle=
|
||||
Spawner Active (@1)=Spawnador Ativo (@1)
|
||||
Spawner Not Active (enter settings)=Spawnador Inativo (configurar)
|
||||
Steel Shears (right-click to shear)=Tesoura de Aço (clique-direito para tosquiar)
|
||||
#Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] player_distance[1-20] y_offset[-10 to 10]”=
|
||||
#lifetimer expired, removed @1=
|
34
locale/mobs.ru.tr
Normal file
34
locale/mobs.ru.tr
Normal file
@ -0,0 +1,34 @@
|
||||
# textdomain:mobs
|
||||
** Peaceful Mode Active - No Monsters Will Spawn=** Мирный модус активирован - монстры не спаунятся
|
||||
@1 (Tamed)=@1 (Прирученный)
|
||||
@1 at full health (@2)=@1 при полном здоровье (@2)
|
||||
@1 has been tamed!=@1 приручен
|
||||
@1 is owner!=@1 владелец
|
||||
#Active Mob Limit Reached!=
|
||||
Already protected!=Уже защищен!
|
||||
#Change=
|
||||
#Command:=
|
||||
Enter name:=Введите имя:
|
||||
#Enter texture:=
|
||||
Lasso (right-click animal to put in inventory)=Лассо (Правый клик - положить животное в инвентарь)
|
||||
Leather=Кожа
|
||||
Meat=Мясо
|
||||
Missed!=Промазал!
|
||||
Mob Fence=Забор от мобов
|
||||
#Mob Fence Top=
|
||||
Mob Protection Rune=Защитная руна мобов
|
||||
#Mob Reset Stick=
|
||||
#Mob Spawner=
|
||||
Mob Spawner settings failed!=Настройки спаунера моба провалились
|
||||
Mob has been protected!=Моб защищен!
|
||||
Name Tag=Новый тэг
|
||||
Net (right-click animal to put in inventory)=Сеть (Правый клик - положить животное в инвентарь)
|
||||
Not tamed!=Не прирученный
|
||||
Raw Meat=Сырое мясо
|
||||
Rename=Переименовать
|
||||
Saddle=Седло
|
||||
Spawner Active (@1)=Активные спаунер (@1)
|
||||
Spawner Not Active (enter settings)=Спаунер не активен (введите настройки)
|
||||
Steel Shears (right-click to shear)=Ножницы (Правый клик - подстричь)
|
||||
#Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] player_distance[1-20] y_offset[-10 to 10]”=
|
||||
#lifetimer expired, removed @1=
|
34
locale/mobs.tr.tr
Normal file
34
locale/mobs.tr.tr
Normal file
@ -0,0 +1,34 @@
|
||||
# textdomain:mobs
|
||||
#** Peaceful Mode Active - No Monsters Will Spawn=
|
||||
#@1 (Tamed)=
|
||||
@1 at full health (@2)=@1 tam canında (@2)
|
||||
@1 has been tamed!=@1 tamamen evcilleştirilmiştir!
|
||||
@1 is owner!=Sahibi @1!
|
||||
#Active Mob Limit Reached!=
|
||||
#Already protected!=
|
||||
#Change=
|
||||
#Command:=
|
||||
Enter name:=İsim gir:
|
||||
#Enter texture:=
|
||||
Lasso (right-click animal to put in inventory)=Kement (hayvana sağ tıklayarak envantere koy)
|
||||
Leather=Deri
|
||||
Meat=Et
|
||||
Missed!=Kaçırdın!
|
||||
Mob Fence=Canavar Yaratıcı
|
||||
#Mob Fence Top=
|
||||
#Mob Protection Rune=
|
||||
#Mob Reset Stick=
|
||||
#Mob Spawner=
|
||||
Mob Spawner settings failed!=Yaratıcı ayarları uygulanamadı.
|
||||
#Mob has been protected!=
|
||||
Name Tag=İsim etiketi
|
||||
Net (right-click animal to put in inventory)=Ağ (hayvana sağ tıklayarak envantere koy)
|
||||
Not tamed!=Evcil değil!
|
||||
Raw Meat=Çiğ et
|
||||
Rename=Yeniden adlandır
|
||||
#Saddle=
|
||||
Spawner Active (@1)=Yaratıcı aktif (@1)
|
||||
Spawner Not Active (enter settings)=Yaratıcı aktif değil (ayarlara gir)
|
||||
Steel Shears (right-click to shear)=Çelik makas (sağ tıklayarak kes)
|
||||
#Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] player_distance[1-20] y_offset[-10 to 10]”=
|
||||
#lifetimer expired, removed @1=
|
34
locale/mobs.zh_CN.tr
Normal file
34
locale/mobs.zh_CN.tr
Normal file
@ -0,0 +1,34 @@
|
||||
# textdomain:mobs
|
||||
** Peaceful Mode Active - No Monsters Will Spawn=** 和平模式已激活——没有怪物会产生
|
||||
@1 (Tamed)=@1(已驯服)
|
||||
@1 at full health (@2)=@1已经满血(@2)
|
||||
@1 has been tamed!=@1已经被驯服!
|
||||
@1 is owner!=@1 是主人
|
||||
#Active Mob Limit Reached!=
|
||||
Already protected!=已经被保护!
|
||||
#Change=
|
||||
#Command:=
|
||||
Enter name:=输入名称:
|
||||
#Enter texture:=
|
||||
Lasso (right-click animal to put in inventory)=套索(右键单击动物以放入物品栏)
|
||||
Leather=皮革
|
||||
Meat=肉
|
||||
Missed!=没抓住!
|
||||
Mob Fence=Mob 栅栏
|
||||
#Mob Fence Top=
|
||||
Mob Protection Rune=Mob 保护符文
|
||||
#Mob Reset Stick=
|
||||
#Mob Spawner=
|
||||
Mob Spawner settings failed!=Mob 孵化器设置失败!
|
||||
Mob has been protected!=Mob 已经被保护了!
|
||||
Name Tag=名称标签
|
||||
Net (right-click animal to put in inventory)=网(右键单击动物以放入物品栏)
|
||||
Not tamed!=没有驯服!
|
||||
Raw Meat=生肉
|
||||
Rename=重新命名
|
||||
Saddle=鞍
|
||||
Spawner Active (@1)=孵化器正在运转(@1)
|
||||
Spawner Not Active (enter settings)=孵化器未使用(输入设置)
|
||||
Steel Shears (right-click to shear)=钢剪(右键单击以剪切)
|
||||
#Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] player_distance[1-20] y_offset[-10 to 10]”=
|
||||
#lifetimer expired, removed @1=
|
34
locale/mobs.zh_TW.tr
Normal file
34
locale/mobs.zh_TW.tr
Normal file
@ -0,0 +1,34 @@
|
||||
# textdomain:mobs
|
||||
** Peaceful Mode Active - No Monsters Will Spawn=** 和平模式已激活——沒有怪物會產生
|
||||
@1 (Tamed)=@1(已馴服)
|
||||
@1 at full health (@2)=@1已經滿血(@2)
|
||||
@1 has been tamed!=@1已經被馴服!
|
||||
@1 is owner!=@1 是主人
|
||||
#Active Mob Limit Reached!=
|
||||
Already protected!=已經被保護!
|
||||
#Change=
|
||||
#Command:=
|
||||
Enter name:=輸入名稱:
|
||||
#Enter texture:=
|
||||
Lasso (right-click animal to put in inventory)=套索(右鍵單擊動物以放入物品欄)
|
||||
Leather=皮革
|
||||
Meat=肉
|
||||
Missed!=沒抓住!
|
||||
Mob Fence=Mob 柵欄
|
||||
#Mob Fence Top=
|
||||
Mob Protection Rune=Mob 保護符文
|
||||
#Mob Reset Stick=
|
||||
#Mob Spawner=
|
||||
Mob Spawner settings failed!=Mob 孵化器設置失敗!
|
||||
Mob has been protected!=Mob 已經被保護了!
|
||||
Name Tag=名稱標籤
|
||||
Net (right-click animal to put in inventory)=網(右鍵單擊動物以放入物品欄)
|
||||
Not tamed!=沒有馴服!
|
||||
Raw Meat=生肉
|
||||
Rename=重新命名
|
||||
Saddle=鞍
|
||||
Spawner Active (@1)=孵化器正在運轉(@1)
|
||||
Spawner Not Active (enter settings)=孵化器未使用(輸入設置)
|
||||
Steel Shears (right-click to shear)=鋼剪(右鍵單擊以剪切)
|
||||
#Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] player_distance[1-20] y_offset[-10 to 10]”=
|
||||
#lifetimer expired, removed @1=
|
@ -101,18 +101,26 @@ msgstr ""
|
||||
msgid "Mob Fence"
|
||||
msgstr ""
|
||||
|
||||
#: crafts.lua
|
||||
msgid "Mob Fence Top"
|
||||
msgstr ""
|
||||
|
||||
#: spawner.lua
|
||||
msgid "Mob Spawner"
|
||||
msgstr ""
|
||||
|
||||
#: spawner.lua
|
||||
msgid "Mob MinLight MaxLight Amount PlayerDist"
|
||||
msgid "(mob name) (min light) (max light) (amount) (player distance) (Y offset)"
|
||||
msgstr ""
|
||||
|
||||
#: spawner.lua
|
||||
msgid "Spawner Not Active (enter settings)"
|
||||
msgstr ""
|
||||
|
||||
#@ spawner.lua
|
||||
msgid "Command:"
|
||||
msgstr ""
|
||||
|
||||
#: spawner.lua
|
||||
msgid "Spawner Active (@1)"
|
||||
msgstr ""
|
||||
|
130
locale/zh_CN.po
Normal file
130
locale/zh_CN.po
Normal file
@ -0,0 +1,130 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# IFRFSX<1079092922@qq.com>, 2020.
|
||||
#
|
||||
#, 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 "Mob 已经被保护了!"
|
||||
|
||||
#: 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 "Mob 保护符文"
|
||||
|
||||
#: crafts.lua
|
||||
msgid "Saddle"
|
||||
msgstr "鞍"
|
||||
|
||||
#: crafts.lua
|
||||
msgid "Mob Fence"
|
||||
msgstr "Mob 栅栏"
|
||||
|
||||
#: spawner.lua
|
||||
msgid "Mob Spawner"
|
||||
msgstr "Mob 孵化器"
|
||||
|
||||
#: spawner.lua
|
||||
msgid "Mob MinLight MaxLight Amount PlayerDist"
|
||||
msgstr "Mob/最小光量/最大光量/玩家距离"
|
||||
|
||||
#: 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 "Mob 孵化器设置失败!"
|
||||
|
||||
#: 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 ""
|
||||
"语法: “物品名称 最小光亮[0-14] 最大光亮[0-14] 范围内的最大Mob数量[0 to disable] "
|
||||
"距离[1-20] y_offset[-10 to 10]”"
|
130
locale/zh_TW.po
Normal file
130
locale/zh_TW.po
Normal file
@ -0,0 +1,130 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# IFRFSX<1079092922@qq.com>, 2020.
|
||||
#
|
||||
#, 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 "Mob 已經被保護了!"
|
||||
|
||||
#: 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 "Mob 保護符文"
|
||||
|
||||
#: crafts.lua
|
||||
msgid "Saddle"
|
||||
msgstr "鞍"
|
||||
|
||||
#: crafts.lua
|
||||
msgid "Mob Fence"
|
||||
msgstr "Mob 柵欄"
|
||||
|
||||
#: spawner.lua
|
||||
msgid "Mob Spawner"
|
||||
msgstr "Mob 孵化器"
|
||||
|
||||
#: spawner.lua
|
||||
msgid "Mob MinLight MaxLight Amount PlayerDist"
|
||||
msgstr "Mob/最小光量/最大光量/玩家距離"
|
||||
|
||||
#: 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 "Mob 孵化器設置失敗!"
|
||||
|
||||
#: 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 ""
|
||||
"語法: “物品名稱 最小光亮[0-14] 最大光亮[0-14] 範圍內的最大Mob數量[0 to disable] "
|
||||
"距離[1-20] y_offset[-10 to 10]”"
|
@ -13,6 +13,6 @@ if minetest.get_modpath("lucky_block") then
|
||||
{"dro", {"mobs:protector"}, 1},
|
||||
{"dro", {"mobs:fence_wood"}, 10},
|
||||
{"dro", {"mobs:fence_top"}, 12},
|
||||
{"lig"},
|
||||
{"lig"}
|
||||
})
|
||||
end
|
||||
|
3
mod.conf
3
mod.conf
@ -1 +1,4 @@
|
||||
name = mobs
|
||||
depends = default
|
||||
optional_depends = tnt, dye, farming, invisibility, intllib, lucky_block, cmi, toolranks
|
||||
description = Adds a mob api for mods to add animals or monsters etc.
|
||||
|
182
mount.lua
182
mount.lua
@ -1,9 +1,7 @@
|
||||
|
||||
-- lib_mount by Blert2112 (edited by TenPlus1)
|
||||
|
||||
local enable_crash = false
|
||||
local crash_threshold = 6.5 -- ignored if enable_crash=false
|
||||
|
||||
local abs, cos, floor, sin, sqrt, pi =
|
||||
math.abs, math.cos, math.floor, math.sin, math.sqrt, math.pi
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
--
|
||||
@ -11,7 +9,6 @@ local crash_threshold = 6.5 -- ignored if enable_crash=false
|
||||
--
|
||||
|
||||
local node_ok = function(pos, fallback)
|
||||
|
||||
fallback = fallback or mobs.fallback_node
|
||||
|
||||
local node = minetest.get_node_or_nil(pos)
|
||||
@ -25,7 +22,6 @@ end
|
||||
|
||||
|
||||
local function node_is(pos)
|
||||
|
||||
local node = node_ok(pos)
|
||||
|
||||
if node.name == "air" then
|
||||
@ -49,33 +45,30 @@ end
|
||||
|
||||
|
||||
local function get_sign(i)
|
||||
|
||||
i = i or 0
|
||||
|
||||
if i == 0 then
|
||||
return 0
|
||||
else
|
||||
return i / math.abs(i)
|
||||
return i / abs(i)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
local function get_velocity(v, yaw, y)
|
||||
|
||||
local x = -math.sin(yaw) * v
|
||||
local z = math.cos(yaw) * v
|
||||
local x = -sin(yaw) * v
|
||||
local z = 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)
|
||||
return 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
|
||||
@ -84,23 +77,21 @@ local function force_detach(player)
|
||||
|
||||
local entity = attached_to:get_luaentity()
|
||||
|
||||
if entity.driver
|
||||
if entity and entity.driver
|
||||
and entity.driver == player then
|
||||
|
||||
entity.driver = nil
|
||||
end
|
||||
|
||||
player:set_detach()
|
||||
default.player_attached[player:get_player_name()] = false
|
||||
player_api.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} })
|
||||
player_api.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)
|
||||
@ -119,10 +110,37 @@ end)
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
-- Just for correct detaching
|
||||
local function find_free_pos(pos)
|
||||
local check = {
|
||||
{x = 1, y = 0, z = 0},
|
||||
{x = 1, y = 1, z = 0},
|
||||
{x = -1, y = 0, z = 0},
|
||||
{x = -1, y = 1, z = 0},
|
||||
{x = 0, y = 0, z = 1},
|
||||
{x = 0, y = 1, z = 1},
|
||||
{x = 0, y = 0, z = -1},
|
||||
{x = 0, y = 1, z = -1}
|
||||
}
|
||||
|
||||
for _, c in pairs(check) do
|
||||
local npos = {x = pos.x + c.x, y = pos.y + c.y, z = pos.z + c.z}
|
||||
local node = minetest.get_node_or_nil(npos)
|
||||
if node and node.name then
|
||||
local def = minetest.registered_nodes[node.name]
|
||||
if def and not def.walkable and
|
||||
def.liquidtype == "none" then
|
||||
return npos
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return pos
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
function mobs.attach(entity, player)
|
||||
|
||||
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}
|
||||
@ -131,17 +149,17 @@ function mobs.attach(entity, player)
|
||||
local rot_view = 0
|
||||
|
||||
if entity.player_rotation.y == 90 then
|
||||
rot_view = math.pi/2
|
||||
rot_view = pi / 2
|
||||
end
|
||||
|
||||
attach_at = entity.driver_attach_at
|
||||
eye_offset = entity.driver_eye_offset
|
||||
local attach_at = entity.driver_attach_at
|
||||
local 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_api.player_attached[player:get_player_name()] = true
|
||||
player:set_eye_offset(eye_offset, {x = 0, y = 0, z = 0})
|
||||
|
||||
player:set_properties({
|
||||
@ -152,36 +170,35 @@ function mobs.attach(entity, player)
|
||||
})
|
||||
|
||||
minetest.after(0.2, function()
|
||||
default.player_set_animation(player, "sit" , 30)
|
||||
if player and player:is_player() then
|
||||
player_api.set_animation(player, "sit", 30)
|
||||
end
|
||||
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)
|
||||
|
||||
function mobs.detach(player)
|
||||
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()
|
||||
if player and player:is_player() then
|
||||
local pos = find_free_pos(player:get_pos())
|
||||
pos.y = pos.y + 0.5
|
||||
player:set_pos(pos)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
|
||||
function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime)
|
||||
local yaw = entity.object:get_yaw() or 0
|
||||
|
||||
local rot_steer, rot_view = math.pi/2, 0
|
||||
local rot_view = 0
|
||||
|
||||
if entity.player_rotation.y == 90 then
|
||||
rot_steer, rot_view = 0, math.pi/2
|
||||
rot_view = pi / 2
|
||||
end
|
||||
|
||||
local acce_y = 0
|
||||
@ -191,19 +208,14 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime)
|
||||
|
||||
-- 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
|
||||
@ -211,13 +223,24 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime)
|
||||
entity.v = entity.v - entity.accel / 10
|
||||
end
|
||||
|
||||
-- fix mob rotation
|
||||
if entity.rotate ~= nil and entity.driver:get_look_horizontal() ~= nil then
|
||||
entity.object:setyaw(entity.driver:get_look_horizontal() - entity.rotate)
|
||||
-- mob rotation
|
||||
local horz
|
||||
if entity.alt_turn == true then
|
||||
horz = yaw
|
||||
|
||||
if ctrl.left then
|
||||
horz = horz + 0.05
|
||||
|
||||
elseif ctrl.right then
|
||||
horz = horz - 0.05
|
||||
end
|
||||
else
|
||||
horz = entity.driver:get_look_horizontal() or 0
|
||||
end
|
||||
|
||||
if can_fly then
|
||||
entity.object:set_yaw(horz - entity.rotate)
|
||||
|
||||
if can_fly then
|
||||
-- fly up
|
||||
if ctrl.jump then
|
||||
velo.y = velo.y + 1
|
||||
@ -237,9 +260,7 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime)
|
||||
velo.y = velo.y + 0.1
|
||||
if velo.y > 0 then velo.y = 0 end
|
||||
end
|
||||
|
||||
else
|
||||
|
||||
-- jump
|
||||
if ctrl.jump then
|
||||
|
||||
@ -248,13 +269,11 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime)
|
||||
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
|
||||
@ -273,7 +292,6 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime)
|
||||
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
|
||||
@ -286,14 +304,15 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime)
|
||||
max_spd = entity.max_speed_forward
|
||||
end
|
||||
|
||||
if math.abs(entity.v) > max_spd then
|
||||
if 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}
|
||||
if not p then return end
|
||||
|
||||
local new_acce = {x = 0, y = -9.81, z = 0}
|
||||
|
||||
p.y = p.y - 0.5
|
||||
|
||||
@ -301,19 +320,14 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime)
|
||||
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
|
||||
@ -328,14 +342,12 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime)
|
||||
end
|
||||
end
|
||||
|
||||
if entity.terrain_type == 2
|
||||
or entity.terrain_type == 3 then
|
||||
|
||||
local terrain_type = entity.terrain_type
|
||||
if terrain_type == 2 or 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
|
||||
@ -344,9 +356,11 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime)
|
||||
new_acce.y = 5
|
||||
end
|
||||
else
|
||||
if math.abs(velo.y) < 1 then
|
||||
if abs(velo.y) < 1 then
|
||||
local pos = entity.object:get_pos()
|
||||
pos.y = math.floor(pos.y) + 0.5
|
||||
if not pos then return end
|
||||
|
||||
pos.y = floor(pos.y) + 0.5
|
||||
entity.object:set_pos(pos)
|
||||
velo.y = 0
|
||||
end
|
||||
@ -356,46 +370,22 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime)
|
||||
end
|
||||
end
|
||||
|
||||
new_velo = get_velocity(v, entity.object:get_yaw() - rot_view, velo.y)
|
||||
local new_velo = get_velocity(v, yaw - rot_view, velo.y)
|
||||
new_acce.y = new_acce.y + acce_y
|
||||
|
||||
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)
|
||||
|
||||
function mobs.fly(entity, _, 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({
|
||||
@ -415,11 +405,10 @@ function mobs.fly(entity, dtime, speed, shoots, arrow, moving_anim, stand_anim)
|
||||
entity.object:set_velocity({x = 0, y = -2, z = 0})
|
||||
end
|
||||
|
||||
entity.object:set_yaw(yaw + math.pi + math.pi / 2 - entity.rotate)
|
||||
entity.object:set_yaw(yaw + pi + pi / 2 - entity.rotate)
|
||||
|
||||
-- firing arrows
|
||||
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,
|
||||
@ -431,8 +420,8 @@ function mobs.fly(entity, dtime, speed, shoots, arrow, moving_anim, stand_anim)
|
||||
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)
|
||||
yaw = entity.driver:get_look_horizontal()
|
||||
obj:set_yaw(yaw + pi / 2)
|
||||
obj:set_velocity(vec)
|
||||
else
|
||||
obj:remove()
|
||||
@ -441,7 +430,6 @@ function mobs.fly(entity, dtime, speed, shoots, arrow, moving_anim, stand_anim)
|
||||
|
||||
-- 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
|
||||
|
@ -23,6 +23,14 @@ Lucky Blocks: 9
|
||||
|
||||
|
||||
Changelog:
|
||||
- 1.55 - Add 'peaceful_player' privelage and setting so mobs don't attack specific players (thanks sfence)
|
||||
- 1.54 - Simplified animal breeding function, added editable settings (thanks Wuzzy), Child mobs now take 20 mins to grow up, reverted to simple mob spawning with setting to use area checks, on_flop added, air_damage added.
|
||||
- 1.53 - Added 'on_map_load' settings to mobs:spawn so that mobs will only spawn when new areas of map are loaded.
|
||||
- 1.52 - Added 'mob_active_limit' in settings to set number of mobs in game,
|
||||
(default is 0 for unlimited), removed {immortal} from mob armor, fluid viscocity slows mobs
|
||||
- 1.51 - Added some node checks for dangerous nodes, jumping and falling tweaks, spawn area check (thx for idea wuzzy), re-enabled mob suffocation, add 'mob_nospawn_range' setting
|
||||
- 1.50 - Added new line_of_sight function that uses raycasting if mt5.0 is found, (thanks Astrobe), dont spawn mobs if world anchor nearby (technic or simple_anchor mods), chinese local added
|
||||
- 1.49- Added mobs:force_capture(self, player) function, api functions now use metatables thanks to bell07
|
||||
- 1.48- Add mobs:set_velocity(self, velocity) global function
|
||||
- 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
|
||||
|
@ -27,3 +27,15 @@ 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
|
||||
|
||||
# Sets minimum distance around player that mobs cannot spawn
|
||||
mob_nospawn_range (Mob no-spawn range) float 12.0
|
||||
|
||||
# Sets maximum number of active mobs in game (0 for unlimited)
|
||||
mob_active_limit (Mob Active Limit) float 0
|
||||
|
||||
# Enables area check when spawning mobs
|
||||
mob_area_spawn (Mob Area Spawn) bool false
|
||||
|
||||
# Enable peaceful player attack prevention
|
||||
enable_peaceful_player (Mobs do not attack peaceful player without reason) bool false
|
||||
|
43
spawner.lua
43
spawner.lua
@ -1,11 +1,9 @@
|
||||
|
||||
-- intllib
|
||||
local MP = minetest.get_modpath(minetest.get_current_modname())
|
||||
local S, NS = dofile(MP .. "/intllib.lua")
|
||||
local S = mobs.intllib
|
||||
|
||||
-- mob spawner
|
||||
|
||||
local spawner_default = "mobs_animal:pumba 10 15 0 0"
|
||||
local spawner_default = "mobs_animal:pumba 10 15 0 0 0"
|
||||
|
||||
minetest.register_node("mobs:spawner", {
|
||||
tiles = {"mob_spawner.png"},
|
||||
@ -19,9 +17,17 @@ minetest.register_node("mobs:spawner", {
|
||||
|
||||
local meta = minetest.get_meta(pos)
|
||||
|
||||
-- setup formspec
|
||||
local head = S("(mob name) (min light) (max light) (amount)"
|
||||
.. " (player distance) (Y offset)")
|
||||
|
||||
-- text entry formspec
|
||||
meta:set_string("formspec",
|
||||
"field[text;" .. S("Mob MinLight MaxLight Amount PlayerDist") .. ";${command}]")
|
||||
"size[10,3.5]"
|
||||
.. "label[0.15,0.5;" .. minetest.formspec_escape(head) .. "]"
|
||||
.. "field[1,2.5;8.5,0.8;text;" .. S("Command:")
|
||||
.. ";${command}]")
|
||||
|
||||
meta:set_string("infotext", S("Spawner Not Active (enter settings)"))
|
||||
meta:set_string("command", spawner_default)
|
||||
end,
|
||||
@ -55,11 +61,11 @@ minetest.register_node("mobs:spawner", {
|
||||
local pla = tonumber(comm[5]) -- player distance (0 to disable)
|
||||
local yof = tonumber(comm[6]) or 0 -- Y offset to spawn mob
|
||||
|
||||
if mob and mob ~= "" and mobs.spawning_mobs[mob] == true
|
||||
if mob and mob ~= "" and mobs.spawning_mobs[mob]
|
||||
and num and num >= 0 and num <= 10
|
||||
and mlig and mlig >= 0 and mlig <= 15
|
||||
and xlig and xlig >= 0 and xlig <= 15
|
||||
and pla and pla >=0 and pla <= 20
|
||||
and pla and pla >= 0 and pla <= 20
|
||||
and yof and yof > -10 and yof < 10 then
|
||||
|
||||
meta:set_string("command", fields.text)
|
||||
@ -68,9 +74,9 @@ minetest.register_node("mobs:spawner", {
|
||||
else
|
||||
minetest.chat_send_player(name, S("Mob Spawner settings failed!"))
|
||||
minetest.chat_send_player(name,
|
||||
S("Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] distance[1-20] y_offset[-10 to 10]”"))
|
||||
S("Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] player_distance[1-20] y_offset[-10 to 10]”"))
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
@ -117,10 +123,10 @@ minetest.register_abm({
|
||||
-- check objects inside 9x9 area around spawner
|
||||
local objs = minetest.get_objects_inside_radius(pos, 9)
|
||||
local count = 0
|
||||
local ent = nil
|
||||
local ent
|
||||
|
||||
-- count mob objects of same type in area
|
||||
for k, obj in ipairs(objs) do
|
||||
for _, obj in ipairs(objs) do
|
||||
|
||||
ent = obj:get_luaentity()
|
||||
|
||||
@ -138,9 +144,9 @@ minetest.register_abm({
|
||||
if pla > 0 then
|
||||
|
||||
local in_range = 0
|
||||
local objs = minetest.get_objects_inside_radius(pos, pla)
|
||||
local objsp = minetest.get_objects_inside_radius(pos, pla)
|
||||
|
||||
for _,oir in pairs(objs) do
|
||||
for _, oir in pairs(objsp) do
|
||||
|
||||
if oir:is_player() then
|
||||
|
||||
@ -156,11 +162,17 @@ minetest.register_abm({
|
||||
end
|
||||
end
|
||||
|
||||
-- set medium mob usually spawns in (defaults to air)
|
||||
local reg = minetest.registered_entities[mob].fly_in
|
||||
|
||||
if not reg or type(reg) == "string" then
|
||||
reg = {(reg or "air")}
|
||||
end
|
||||
|
||||
-- find air blocks within 5 nodes of spawner
|
||||
local air = minetest.find_nodes_in_area(
|
||||
{x = pos.x - 5, y = pos.y + yof, z = pos.z - 5},
|
||||
{x = pos.x + 5, y = pos.y + yof, z = pos.z + 5},
|
||||
{"air"})
|
||||
{x = pos.x + 5, y = pos.y + yof, z = pos.z + 5}, reg)
|
||||
|
||||
-- spawn in random air block
|
||||
if air and #air > 0 then
|
||||
@ -176,6 +188,5 @@ minetest.register_abm({
|
||||
minetest.add_entity(pos2, mob)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
})
|
||||
|
BIN
textures/mobs_meat_bottom.png
Normal file
BIN
textures/mobs_meat_bottom.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 253 B |
BIN
textures/mobs_meat_side.png
Normal file
BIN
textures/mobs_meat_side.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 271 B |
BIN
textures/mobs_meat_top.png
Normal file
BIN
textures/mobs_meat_top.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 287 B |
Loading…
x
Reference in New Issue
Block a user