Mehr Mods hinzugefügt
25
mods/mobs/.luacheckrc
Normal file
|
@ -0,0 +1,25 @@
|
|||
unused_args = false
|
||||
|
||||
read_globals = {
|
||||
"minetest",
|
||||
"lucky_block",
|
||||
"vector",
|
||||
"table",
|
||||
"invisibility",
|
||||
"cmi",
|
||||
"toolranks",
|
||||
"pathfinder",
|
||||
"tnt",
|
||||
"ItemStack"
|
||||
}
|
||||
|
||||
globals = {
|
||||
"mobs",
|
||||
"player_api",
|
||||
"default"
|
||||
}
|
||||
|
||||
ignore = {
|
||||
"431", -- Shadowing an upvalue
|
||||
"432", -- Shadowing an upvalue argument
|
||||
}
|
4580
mods/mobs/api.lua
Normal file
941
mods/mobs/api.txt
Normal file
|
@ -0,0 +1,941 @@
|
|||
|
||||
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.
|
||||
|
||||
|
||||
Quick Note
|
||||
----------
|
||||
|
||||
Since the mobs redo api checks for nodes around the mob to function, it relies on a
|
||||
default node incase anything goes wrong, so in the default game this is default:dirt
|
||||
but for any custom game please make sure the following line is registered with your
|
||||
preferred dirt node of choice:
|
||||
|
||||
minetest.register_alias("mapgen_dirt", "mymod:my_dirt_node")
|
||||
|
||||
|
||||
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:
|
||||
|
||||
'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 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[DEPRECATED].
|
||||
'jump_height' holds the height your mob can jump, 0 to disable jumping.
|
||||
'can_leap' when true obstacles like fences or pits wont stop a mob
|
||||
from trying to jump out.
|
||||
'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".
|
||||
'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.
|
||||
'damage' how many health points the mob does to a player or another
|
||||
mob when melee attacking.
|
||||
'damage_group' group in which damage is dealt, dedaults to "fleshy".
|
||||
'damage_texture_modifier' applies texture modifier on hit e.g "^[brighten"
|
||||
or default when enabled is "^[colorize:#c9900070".
|
||||
'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.
|
||||
'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.
|
||||
'fire_damage' holds the damage per second inflicted to mobs when standing
|
||||
'node_damage' True by default, will harm mobs when inside damage_per_second
|
||||
nodes.
|
||||
'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)
|
||||
When set to 16 then only natural light will kill mob.
|
||||
'suffocation' when > 0 mobs will suffocate inside solid blocks and will be
|
||||
hurt by the value given every second (0 to disable).
|
||||
'floats' when True mob will float in water, otherwise they 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", "group:fish"}
|
||||
|
||||
'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_patience' Time in seconds before mob gives up attacking if
|
||||
player isn't seen (Defaults to 11).
|
||||
'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.
|
||||
'attack_ignore' string or table of mob names not to attack.
|
||||
'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.
|
||||
'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.
|
||||
'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.
|
||||
'arrow_override' function that allows tweaking of arrow entity from
|
||||
inside mob definition (self) passed to function.
|
||||
'dogshoot_switch' allows switching between attack types by using timers
|
||||
(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.
|
||||
'homing' When True arrows will follow player when visible.
|
||||
'specific_attack' has a table of entity names that mob can also attack
|
||||
e.g. {"player", "mobs_animal:chicken"}.
|
||||
'friendly_fire` when set to false, mobs will not be able to harm other
|
||||
mobs of the same type with friendly fire arrows.
|
||||
Defaults to true.
|
||||
'runaway_from' contains a table with mob names or nodesto run away
|
||||
from, add "player" to list to runaway from player also.
|
||||
'ignore_invisibility' When true mob will still be able to see and attack
|
||||
player even if invisible (invisibility mod only).
|
||||
'blood_amount' contains the number of blood droplets to appear when
|
||||
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). Adding {unbreakable=1}
|
||||
to node groups stops them being broken by mobs.
|
||||
'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.
|
||||
nodes can also be added so that node_per_second damage
|
||||
does not affect the mob either e.g.
|
||||
{"ethereal:crystal_spike", 0} -- causes no damage.
|
||||
|
||||
'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.
|
||||
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
|
||||
'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.
|
||||
'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
|
||||
|
||||
'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'
|
||||
'jump_start' when a mob is jumping
|
||||
'jump_end'
|
||||
'jump_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'
|
||||
'injured_start' when hit or damaged > 1 hp (if not set then 'walk' is used)
|
||||
'injured_end'
|
||||
'injured_speed'
|
||||
'die_start' death animation
|
||||
'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.
|
||||
|
||||
'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, 0}
|
||||
}
|
||||
'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' +/- y offset value to check specific node to replace
|
||||
'reach' horizontal reach around mob for replace, default is 0
|
||||
|
||||
'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. (DEPRECATED, use on_replace to make changes).
|
||||
|
||||
|
||||
Pickup Items
|
||||
------------
|
||||
|
||||
'pick_up' table of itemstrings the mob will pick up.
|
||||
'on_pick_up' function that will be called on item pickup - arguments are
|
||||
(self, itemstring) and can return nil or a a modified itemstack e.g.
|
||||
|
||||
on_pick_up = function(self, itemstring)
|
||||
|
||||
local istack = ItemStack(entity.itemstring)
|
||||
|
||||
print("-- took", istack:get_name())
|
||||
|
||||
istack:take_item(1)
|
||||
|
||||
return istack
|
||||
end,
|
||||
|
||||
|
||||
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_rightclick' its same as in minetest.register_entity()
|
||||
'on_blast' is called when an explosion happens near mob when using TNT
|
||||
functions, parameters are (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, damage),
|
||||
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) 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_death' Official engine version of above when mob killed (self, killer),
|
||||
'killer' is only returned if player killed the mob.
|
||||
'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
|
||||
status), return with 'false' to skip remainder of mob API.
|
||||
'on_sound' (self, def) called when mob is inside the hearing distance of
|
||||
a sound, passes a def table containing:
|
||||
'sound' the sound being played,
|
||||
'pos' position the sound originated (only sounds with pos detected),
|
||||
'gain' original gain of sound,
|
||||
'distance' distance of mob from sound source,
|
||||
'loudness' how loud sound is to mob (percentage of gain heard at distance)
|
||||
'player' player name sound originated, [NOT IN USE]
|
||||
'object' object reference sound originated, [NOT IN USE]
|
||||
'max_hear_distance' max distance sound can be heard from source.
|
||||
|
||||
|
||||
Hearing Nodes
|
||||
-------------
|
||||
|
||||
If a node has the {on_sound = 1} group and an on_sound() function set as above then
|
||||
nodes within 8 blocks of a sound will be activated and the function run. Check the
|
||||
"mobs:hearing_vines" node as an example which has mesecons support when active.
|
||||
|
||||
|
||||
Internal Variables
|
||||
------------------
|
||||
|
||||
The mob api also has some preset variables and functions that it will remember
|
||||
for each mob.
|
||||
|
||||
'self._cmi_is_mob' Used to determine wether entity is a mobs redo mob when True.
|
||||
'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.texture_mods' contains a list of textures to overlay above the mobs
|
||||
base texture (used for horse saddle)
|
||||
'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
|
||||
'self.pause_timer' used to stop mob thinking when punched so that knockback
|
||||
can take effect.
|
||||
'self.disable_falling' currently used on spider mob when climbing walls, stops
|
||||
the mob from experiencing gravity when true.
|
||||
'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
|
||||
'self.standing_on' Node name mob is standing on.
|
||||
'self.standing_in' Node name mob is standing inside.
|
||||
'self.looking_at' Node name in front of mob.
|
||||
'self.looking_above'Node name in front/above mob.
|
||||
'self.facing_fence' True if mob facing node containing "wall", "fence", "gate"
|
||||
in it's name.
|
||||
|
||||
|
||||
Internal Functions
|
||||
------------------
|
||||
|
||||
Each mob contains a set of functions that can be called for use internally or from
|
||||
another mod entirely, replace mob_class with the mob entity variable:
|
||||
|
||||
mob_class:mob_sound(sound) -- play sound at mob position
|
||||
mob_class:do_attack(player [, force]) -- if not already attacking, attack object given,
|
||||
forced being true stops attacking current target and focuses on one given
|
||||
mob_class:stop_attack() -- stops mob attacking
|
||||
mob_class:collision() -- checks for player collision with mob and returns {x, z} vector
|
||||
mob_class:set_velocity(velocity) -- move at velocity in the facing direction
|
||||
mob_class:get_velocity() -- returns mob speed value
|
||||
mob_class:set_yaw(yaw, delay) -- change mob yaw, delay is for smooth rotation (default:0)
|
||||
mob_class:yaw_to_pos(pos, delay) -- rotates mod to look at position and returns new yaw
|
||||
mob_class:set_animation(animation, force) -- set mob animation
|
||||
mob_class:line_of_sight(pos1, pos2) -- internal line of sight function
|
||||
mob_class:attempt_flight_correction(override) -- check for stuck flying mobs and fix
|
||||
mob_class:update_tag(newname) -- update nametag or give new name
|
||||
mob_class:do_jump() -- check if mob can jump then jump
|
||||
mob_class:follow_holding(clicker) -- return True if mob likes what player is holding
|
||||
mob_class:day_docile() -- return True if mob docile during current daytime
|
||||
mob_class:mob_expire(pos, dtime) -- check if mob is to despawn
|
||||
mob_class:get_nodes() -- get specific nodes around mob
|
||||
mob_class:on_blast(damage) -- function called when mob in blast area
|
||||
mob_class:is_inside(itemtable) -- returns True is mob collisionbox inside any node/group
|
||||
in table
|
||||
mob_class:go_to(pos) -- makes mob go to that position or nearby
|
||||
|
||||
|
||||
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_specific(name, nodes, neighbors, min_light, max_light, interval,
|
||||
chance, active_object_count, min_height, max_height, day_toggle, on_spawn)
|
||||
|
||||
A simpler way to handle mob spawns has been added with the mobs:spawn(def)
|
||||
command which uses above names to make settings clearer:
|
||||
|
||||
|
||||
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
|
||||
|
||||
|
||||
mobs:node_ok(pos, fallback)
|
||||
|
||||
This global function gets the node at pos and if not registered will return the
|
||||
fallback node instead.
|
||||
|
||||
|
||||
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
|
||||
-------------
|
||||
|
||||
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()
|
||||
'mesh' same is in minetest.register_entity()
|
||||
'textures' same is in minetest.register_entity()
|
||||
'collide_with_objects' same as above
|
||||
'velocity' the velocity of the arrow
|
||||
'drop' if set to true any arrows hitting a node will drop as item,
|
||||
if number given then chance (1/num) of item dropping will
|
||||
be used. arrow "mymob:myarrow" will use item of same name.
|
||||
'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_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
|
||||
'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. (self, dtime, moveresult)
|
||||
'on_punch' is a custom function when arrow is punched, nil 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
|
||||
----------
|
||||
|
||||
mobs:register_egg(name, description, background, addegg, no_creative)
|
||||
|
||||
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"
|
||||
'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, damage_radius, entity_radius, texture)
|
||||
'self' mob entity
|
||||
'pos' centre position of explosion
|
||||
'damage_radius' radius of node damage (typically 3)
|
||||
'entity_radius' radius of explosion to players and mobs
|
||||
'texture' particle texture during explosion, defaults to "tnt_smoke.png"
|
||||
|
||||
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)
|
||||
|
||||
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
|
||||
---------------------------
|
||||
|
||||
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) [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.
|
||||
|
||||
...'self' mob information
|
||||
'pos1' position of mob
|
||||
'pos2' position of vistim or player
|
||||
'stepsize' usually set to 1
|
||||
|
||||
Use this instead:
|
||||
|
||||
entity:line_of_sight(pos1, pos2, stepsize)
|
||||
|
||||
|
||||
mobs:can_spawn(pos, name)
|
||||
|
||||
This function checks the surrounding area at [pos] to see if there is enough empty
|
||||
space to spawn mob [name], if so then a new position is returned for use,
|
||||
otherwise nil is returned.
|
||||
|
||||
|
||||
mobs:is_node_dangerous(mob_object, nodename)
|
||||
|
||||
This function returns true if the node name given is harmful to the mob (mob_object),
|
||||
it is mainly used when a mob is near a node it has to avoid.
|
||||
|
||||
|
||||
Looting Level
|
||||
-------------
|
||||
|
||||
If a tool is used with 'looting_level' defined under tool_capabilities then mobs can drop
|
||||
extra items per level up to a maximum of 3 levels. 'looting_level' can also be read from
|
||||
the tools own meta to override the default.
|
||||
|
||||
|
||||
External Settings for "minetest.conf"
|
||||
------------------------------------
|
||||
|
||||
'mob_log_spawn' When True will log spawning position of mobs.
|
||||
'mob_node_timer_interval' How often mobs get nodes around them (0.25 is default)
|
||||
for every 1/4 second.
|
||||
'mob_main_timer_interval' How often mobs run main functions (1.0 is default) for
|
||||
every one second.
|
||||
'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_attack_creatura' When True mobs redo mobs will attack Creatura mod mobs.
|
||||
'mobs_disable_blood' if false blood effects appear when mob is hit (default
|
||||
is false)
|
||||
'mob_hit_effect' False by default, when True and mobs are hit then
|
||||
damage_texture_modifier is used to highlight mob.
|
||||
'mobs_spawn_protected' if set to false then mobs will not spawn in protected
|
||||
areas (default is true)
|
||||
'mobs_spawn_monster_protected' if set to false then monsters will not spawn in
|
||||
protected areas (default is true)
|
||||
'remove_far_mobs' if true then untamed mobs that are outside players
|
||||
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_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
|
||||
'mobs_can_hear' True by default, allows mobs to hear sound around them.
|
||||
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.
|
||||
'mob_smooth_rotate' Enables smooth rotation when mobs turn by default.
|
||||
'mob_height_fix' Disabled by default, increases smaller mob heights so they
|
||||
cannot glitch through certain nodes.
|
||||
'mob_pathfinding_enable' Enable pathfinding.
|
||||
'mob_pathfinding_stuck_timeout' How long before stuck mobs start searching. (default 3.0)
|
||||
'mob_pathfinding_stuck_path_timeout' How long will mob follow path before giving up. (default 5.0)
|
||||
'mob_pathfinding_algorithm' Which pathfinding algorithm to use Dijkstra (default), A*_noprefetch (AStar_noprefetch) or A* (AStar)
|
||||
(A* names differ cause Minetest doesn´t allow "*" in settings)
|
||||
'mob_pathfinding_searchdistance' max search distance from search positions (default 16)
|
||||
'mob_pathfinding_max_jump' max jump height for pathfinding (default 4)
|
||||
'mob_pathfinding_max_drop' max drop height for pathfinding (default 6)
|
||||
'mobs_can_hear' Enabled by default, overrides minetest.sound_play and enables
|
||||
nearby mobs to run a custom on_sound function.
|
||||
'mobs_can_hear_node' Disabled by default, allows nearby nodes to hear and run a
|
||||
custom on_sound function.
|
||||
'mobs_disable_damage_kb' Knockback is calculated by hit damage or uses knockback value
|
||||
from the weapon used, this setting lets you disable the former.
|
||||
'mob_infotext' True by default, shows mob information when you hover over one.
|
||||
|
||||
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 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
|
||||
|
||||
|
||||
Node Sounds
|
||||
-----------
|
||||
|
||||
Mobs Redo will detect wether the Default mod or MineClone/VoxeLibre mod is active and
|
||||
store whichever sound set is available inside the following to save any mob mobs
|
||||
having to detect it themselves:
|
||||
|
||||
mobs.node_sound_defaults()
|
||||
mobs.node_sound_stone_defaults()
|
||||
mobs.node_sound_dirt_defaults()
|
||||
mobs.node_sound_sand_defaults()
|
||||
mobs.node_sound_gravel_defaults()
|
||||
mobs.node_sound_wood_defaults()
|
||||
mobs.node_sound_leaves_defaults()
|
||||
mobs.node_sound_ice_defaults()
|
||||
mobs.node_sound_metal_defaults()
|
||||
mobs.node_sound_water_defaults()
|
||||
mobs.node_sound_snow_defaults()
|
||||
mobs.node_sound_glass_defaults()
|
||||
|
||||
|
||||
Rideable Horse Example Mob
|
||||
--------------------------
|
||||
|
||||
See mob_horse mod https://codeberg.org/tenplus1/mob_horse
|
||||
|
||||
|
||||
External Functions
|
||||
------------------
|
||||
|
||||
These are a list of utility functions that can be called from 3rd party mods.
|
||||
|
||||
mobs:alias_mob(old_name, new_name)
|
||||
mobs:is_invisible(self, player_name)
|
||||
mobs:is_dangerous(self, nodename)
|
||||
mobs:yaw_to_pos(self, target, rotation_steps)
|
||||
mobs:line_of_sight(self, pos1, pos2)
|
||||
mobs:set_animation(self, animation)
|
||||
mobs:yaw(self, yaw, rotation_steps)
|
41
mods/mobs/compatibility.lua
Normal file
|
@ -0,0 +1,41 @@
|
|||
|
||||
-- called after mob registration to check for older settings
|
||||
|
||||
function mobs.compatibility_check(self)
|
||||
|
||||
-- simple mobs rotation setting
|
||||
if self.drawtype == "side" then self.rotate = math.rad(90) end
|
||||
|
||||
-- replace floats var from number to bool
|
||||
if self.floats == 1 then self.floats = true
|
||||
elseif self.floats == 0 then self.floats = false end
|
||||
end
|
||||
|
||||
-- deprecated functions
|
||||
|
||||
function mobs:yaw(entity, yaw, delay)
|
||||
entity:set_yaw(yaw, delay)
|
||||
end
|
||||
|
||||
function mobs:set_animation(entity, anim)
|
||||
entity:set_animation(anim)
|
||||
end
|
||||
|
||||
function mobs:line_of_sight(entity, pos1, pos2)
|
||||
return entity:line_of_sight(pos1, pos2)
|
||||
end
|
||||
|
||||
function mobs:yaw_to_pos(entity, target, rot)
|
||||
return entity:yaw_to_pos(target, rot)
|
||||
end
|
||||
|
||||
function mobs:register_spawn(name, nodes, max_light, min_light, chance,
|
||||
active_object_count, max_height, day_toggle)
|
||||
|
||||
mobs:spawn_specific(name, nodes, {"air"}, min_light, max_light, 30,
|
||||
chance, active_object_count, -31000, max_height, day_toggle)
|
||||
end
|
||||
|
||||
function mobs:explosion(pos, radius)
|
||||
mobs:boom({sounds = {explode = "tnt_explode"}}, pos, radius, radius, "mobs_tnt_smoke.png")
|
||||
end
|
489
mods/mobs/crafts.lua
Normal file
|
@ -0,0 +1,489 @@
|
|||
|
||||
local S = core.get_translator("mobs")
|
||||
local FS = function(...) return core.formspec_escape(S(...)) end
|
||||
local mc2 = core.get_modpath("mcl_core")
|
||||
local mod_def = core.get_modpath("default")
|
||||
|
||||
-- determine which sounds to use, default or mcl_sounds
|
||||
|
||||
local function sound_helper(snd)
|
||||
|
||||
mobs[snd] = (mod_def and default[snd]) or (mc2 and mcl_sounds[snd])
|
||||
or function() return {} end
|
||||
end
|
||||
|
||||
sound_helper("node_sound_defaults")
|
||||
sound_helper("node_sound_stone_defaults")
|
||||
sound_helper("node_sound_dirt_defaults")
|
||||
sound_helper("node_sound_sand_defaults")
|
||||
sound_helper("node_sound_gravel_defaults")
|
||||
sound_helper("node_sound_wood_defaults")
|
||||
sound_helper("node_sound_leaves_defaults")
|
||||
sound_helper("node_sound_ice_defaults")
|
||||
sound_helper("node_sound_metal_defaults")
|
||||
sound_helper("node_sound_water_defaults")
|
||||
sound_helper("node_sound_snow_defaults")
|
||||
sound_helper("node_sound_glass_defaults")
|
||||
|
||||
-- mob repellent node
|
||||
|
||||
core.register_node("mobs:mob_repellent", {
|
||||
description = S("Mob Repellent"),
|
||||
tiles = {"mobs_repellent.png"},
|
||||
is_ground_content = false,
|
||||
groups = {handy = 1, cracky = 3},
|
||||
sounds = mobs.node_sound_stone_defaults()
|
||||
})
|
||||
|
||||
-- helper function to add {eatable} group to food items
|
||||
|
||||
function mobs.add_eatable(item, hp)
|
||||
|
||||
local def = core.registered_items[item]
|
||||
|
||||
if def then
|
||||
|
||||
local groups = table.copy(def.groups) or {}
|
||||
|
||||
groups.eatable = hp ; groups.flammable = 2
|
||||
|
||||
core.override_item(item, {groups = groups})
|
||||
end
|
||||
end
|
||||
|
||||
-- recipe items
|
||||
|
||||
local items = {
|
||||
paper = mc2 and "mcl_core:paper" or "default:paper",
|
||||
dye_black = mc2 and "mcl_dye:black" or "dye:black",
|
||||
string = mc2 and "mcl_mobitems:string" or "farming:string",
|
||||
stick = mc2 and "mcl_core:stick" or "default:stick",
|
||||
diamond = mc2 and "mcl_core:diamond" or "default:diamond",
|
||||
steel_ingot = mc2 and "mcl_core:iron_ingot" or "default:steel_ingot",
|
||||
gold_block = mc2 and "mcl_core:goldblock" or "default:goldblock",
|
||||
diamond_block = mc2 and "mcl_core:diamondblock" or "default:diamondblock",
|
||||
stone = mc2 and "mcl_core:stone" or "default:stone",
|
||||
mese_crystal = mc2 and "mcl_core:gold_ingot" or "default:mese_crystal",
|
||||
wood = mc2 and "mcl_core:wood" or "default:wood",
|
||||
fence_wood = mc2 and "group:fence_wood" or "default:fence_wood",
|
||||
meat_raw = mc2 and "mcl_mobitems:beef" or "group:food_meat_raw",
|
||||
meat_cooked = mc2 and "mcl_mobitems:cooked_beef" or "group:food_meat",
|
||||
}
|
||||
|
||||
-- name tag
|
||||
|
||||
core.register_craftitem("mobs:nametag", {
|
||||
description = S("Name Tag") .. " " .. S("\nRight-click Mobs Redo mob to apply"),
|
||||
inventory_image = "mobs_nametag.png",
|
||||
groups = {flammable = 2, nametag = 1}
|
||||
})
|
||||
|
||||
core.register_craft({
|
||||
output = "mobs:nametag",
|
||||
recipe = {
|
||||
{ items.paper, items.dye_black, items.string }
|
||||
}
|
||||
})
|
||||
|
||||
-- leather
|
||||
|
||||
core.register_craftitem("mobs:leather", {
|
||||
description = S("Leather"),
|
||||
inventory_image = "mobs_leather.png",
|
||||
groups = {flammable = 2, leather = 1}
|
||||
})
|
||||
|
||||
-- raw meat
|
||||
|
||||
core.register_craftitem("mobs:meat_raw", {
|
||||
description = S("Raw Meat"),
|
||||
inventory_image = "mobs_meat_raw.png",
|
||||
on_use = core.item_eat(3),
|
||||
groups = {food_meat_raw = 1}
|
||||
})
|
||||
|
||||
mobs.add_eatable("mobs:meat_raw", 3)
|
||||
|
||||
-- cooked meat
|
||||
|
||||
core.register_craftitem("mobs:meat", {
|
||||
description = S("Meat"),
|
||||
inventory_image = "mobs_meat.png",
|
||||
on_use = core.item_eat(8),
|
||||
groups = {food_meat = 1}
|
||||
})
|
||||
|
||||
mobs.add_eatable("mobs:meat", 8)
|
||||
|
||||
core.register_craft({
|
||||
type = "cooking",
|
||||
output = "mobs:meat",
|
||||
recipe = "mobs:meat_raw",
|
||||
cooktime = 5
|
||||
})
|
||||
|
||||
-- lasso
|
||||
|
||||
core.register_tool("mobs:lasso", {
|
||||
description = S("Lasso (right-click animal to put in inventory)"),
|
||||
inventory_image = "mobs_magic_lasso.png",
|
||||
groups = {flammable = 2}
|
||||
})
|
||||
|
||||
core.register_craft({
|
||||
output = "mobs:lasso",
|
||||
recipe = {
|
||||
{ items.string, "", items.string},
|
||||
{ "", items.diamond, "" },
|
||||
{ items.string, "", items.string }
|
||||
}
|
||||
})
|
||||
|
||||
core.register_alias("mobs:magic_lasso", "mobs:lasso")
|
||||
|
||||
-- net
|
||||
|
||||
core.register_tool("mobs:net", {
|
||||
description = S("Net (right-click animal to put in inventory)"),
|
||||
inventory_image = "mobs_net.png",
|
||||
groups = {flammable = 2}
|
||||
})
|
||||
|
||||
core.register_craft({
|
||||
output = "mobs:net",
|
||||
recipe = {
|
||||
{ items.stick, "", items.stick },
|
||||
{ items.stick, "", items.stick },
|
||||
{ items.string, items.stick, items.string }
|
||||
}
|
||||
})
|
||||
|
||||
-- shears (right click to shear animal)
|
||||
|
||||
core.register_tool("mobs:shears", {
|
||||
description = S("Steel Shears (right-click to shear)"),
|
||||
inventory_image = "mobs_shears.png",
|
||||
groups = {flammable = 2}
|
||||
})
|
||||
|
||||
core.register_craft({
|
||||
output = "mobs:shears",
|
||||
recipe = {
|
||||
{ "", items.steel_ingot, "" },
|
||||
{ "", items.stick, items.steel_ingot }
|
||||
}
|
||||
})
|
||||
|
||||
-- protection rune
|
||||
|
||||
core.register_craftitem("mobs:protector", {
|
||||
description = S("Mob Protection Rune"),
|
||||
inventory_image = "mobs_protector.png",
|
||||
groups = {flammable = 2}
|
||||
})
|
||||
|
||||
core.register_craft({
|
||||
output = "mobs:protector",
|
||||
recipe = {
|
||||
{ items.stone, items.stone, items.stone },
|
||||
{ items.stone, items.gold_block, items.stone },
|
||||
{ items.stone, items.stone, items.stone }
|
||||
}
|
||||
})
|
||||
|
||||
-- protection rune (level 2)
|
||||
|
||||
core.register_craftitem("mobs:protector2", {
|
||||
description = S("Mob Protection Rune (Level 2)"),
|
||||
inventory_image = "mobs_protector2.png",
|
||||
groups = {flammable = 2}
|
||||
})
|
||||
|
||||
core.register_craft({
|
||||
output = "mobs:protector2",
|
||||
recipe = {
|
||||
{ "mobs:protector", items.mese_crystal, "mobs:protector" },
|
||||
{ items.mese_crystal, items.diamond_block, items.mese_crystal },
|
||||
{ "mobs:protector", items.mese_crystal, "mobs:protector" }
|
||||
}
|
||||
})
|
||||
|
||||
-- saddle
|
||||
|
||||
core.register_craftitem("mobs:saddle", {
|
||||
description = S("Saddle"),
|
||||
inventory_image = "mobs_saddle.png",
|
||||
groups = {flammable = 2, saddle = 1}
|
||||
})
|
||||
|
||||
core.register_craft({
|
||||
output = "mobs:saddle",
|
||||
recipe = {
|
||||
{"group:leather", "group:leather", "group:leather"},
|
||||
{"group:leather", items.steel_ingot, "group:leather"},
|
||||
{"group:leather", items.steel_ingot, "group:leather"}
|
||||
}
|
||||
})
|
||||
|
||||
-- register mob fence if default found
|
||||
|
||||
if mod_def and 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 = mobs.node_sound_wood_defaults(),
|
||||
collision_box = {
|
||||
type = "fixed", fixed = {{-0.5, -0.5, -0.5, 0.5, 1.9, 0.5}}
|
||||
}
|
||||
})
|
||||
end
|
||||
|
||||
-- mob fence top (has enlarged collisionbox to stop mobs getting over)
|
||||
|
||||
core.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, axey = 1},
|
||||
sounds = mobs.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}}
|
||||
})
|
||||
|
||||
core.register_craft({
|
||||
output = "mobs:fence_top 12",
|
||||
recipe = {
|
||||
{"group:wood", "group:wood", "group:wood"},
|
||||
{"", items.fence_wood, ""}
|
||||
}
|
||||
})
|
||||
|
||||
-- items that can be used as fuel
|
||||
|
||||
core.register_craft({type = "fuel", recipe = "mobs:nametag", burntime = 3})
|
||||
core.register_craft({type = "fuel", recipe = "mobs:lasso", burntime = 7})
|
||||
core.register_craft({type = "fuel", recipe = "mobs:net", burntime = 8})
|
||||
core.register_craft({type = "fuel", recipe = "mobs:leather", burntime = 4})
|
||||
core.register_craft({type = "fuel", recipe = "mobs:saddle", burntime = 7})
|
||||
core.register_craft({type = "fuel", recipe = "mobs:fence_wood", burntime = 7})
|
||||
core.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.
|
||||
-- also holding sneak while punching mob lets you change texture name.
|
||||
|
||||
local tex_obj
|
||||
|
||||
core.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 = core.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
|
||||
|
||||
-- get base texture
|
||||
local bt = tex_obj:get_luaentity().base_texture[1]
|
||||
|
||||
if type(bt) ~= "string" then bt = "" end
|
||||
|
||||
local name = user:get_player_name()
|
||||
|
||||
core.show_formspec(name, "mobs_texture", "size[8,4]"
|
||||
.. "field[0.5,1;7.5,0;name;"
|
||||
.. FS("Enter texture:") .. ";" .. bt .. "]"
|
||||
.. "button_exit[2.5,3.5;3,1;mob_texture_change;"
|
||||
.. FS("Change") .. "]")
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
core.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
|
||||
|
||||
core.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, axey = 1, handy = 1},
|
||||
is_ground_content = false,
|
||||
sounds = mobs.node_sound_dirt_defaults(),
|
||||
on_place = core.rotate_node,
|
||||
on_use = core.item_eat(20),
|
||||
_mcl_hardness = 0.8,
|
||||
_mcl_blast_resistance = 1
|
||||
})
|
||||
|
||||
mobs.add_eatable("mobs:meatblock", 20)
|
||||
|
||||
core.register_craft({
|
||||
output = "mobs:meatblock",
|
||||
recipe = {
|
||||
{ items.meat_cooked, items.meat_cooked, items.meat_cooked },
|
||||
{ items.meat_cooked, items.meat_cooked, items.meat_cooked },
|
||||
{ items.meat_cooked, items.meat_cooked, items.meat_cooked }
|
||||
}
|
||||
})
|
||||
|
||||
-- Meat Block (raw)
|
||||
|
||||
core.register_node("mobs:meatblock_raw", {
|
||||
description = S("Raw Meat Block"),
|
||||
tiles = {"mobs_meat_raw_top.png", "mobs_meat_raw_bottom.png", "mobs_meat_raw_side.png"},
|
||||
paramtype2 = "facedir",
|
||||
groups = {choppy = 1, oddly_breakable_by_hand = 1, axey = 1, handy = 1},
|
||||
is_ground_content = false,
|
||||
sounds = mobs.node_sound_dirt_defaults(),
|
||||
on_place = core.rotate_node,
|
||||
on_use = core.item_eat(20),
|
||||
_mcl_hardness = 0.8,
|
||||
_mcl_blast_resistance = 1
|
||||
})
|
||||
|
||||
mobs.add_eatable("mobs:meatblock_raw", 20)
|
||||
|
||||
core.register_craft({
|
||||
output = "mobs:meatblock_raw",
|
||||
recipe = {
|
||||
{ items.meat_raw, items.meat_raw, items.meat_raw },
|
||||
{ items.meat_raw, items.meat_raw, items.meat_raw },
|
||||
{ items.meat_raw, items.meat_raw, items.meat_raw }
|
||||
}
|
||||
})
|
||||
|
||||
core.register_craft({
|
||||
type = "cooking",
|
||||
output = "mobs:meatblock",
|
||||
recipe = "mobs:meatblock_raw",
|
||||
cooktime = 30
|
||||
})
|
||||
|
||||
-- hearing vines (if mesecons active it acts like blinkyplant)
|
||||
|
||||
local mod_mese = core.get_modpath("mesecons")
|
||||
|
||||
core.register_node("mobs:hearing_vines", {
|
||||
description = S("Hearing Vines"),
|
||||
drawtype = "firelike",
|
||||
waving = 1,
|
||||
tiles = {"mobs_hearing_vines.png"},
|
||||
inventory_image = "mobs_hearing_vines.png",
|
||||
wield_image = "mobs_hearing_vines.png",
|
||||
paramtype = "light",
|
||||
sunlight_propagates = true,
|
||||
walkable = false,
|
||||
buildable_to = true,
|
||||
groups = {snappy = 3, flammable = 3, attached_node = 1, on_sound = 1},
|
||||
sounds = mobs.node_sound_leaves_defaults(),
|
||||
selection_box = {
|
||||
type = "fixed", fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -0.25, 6 / 16},
|
||||
},
|
||||
on_sound = function(pos, def)
|
||||
if def.loudness > 0.5 then
|
||||
core.set_node(pos, {name = "mobs:hearing_vines_active"})
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
core.register_node("mobs:hearing_vines_active", {
|
||||
description = S("Active Hearing Vines"),
|
||||
drawtype = "firelike",
|
||||
waving = 1,
|
||||
tiles = {"mobs_hearing_vines_active.png"},
|
||||
inventory_image = "mobs_hearing_vines_active.png",
|
||||
wield_image = "mobs_hearing_vines_active.png",
|
||||
paramtype = "light",
|
||||
sunlight_propagates = true,
|
||||
walkable = false,
|
||||
buildable_to = true,
|
||||
light_source = 1,
|
||||
damage_per_second = 4,
|
||||
drop = "mobs:hearing_vines",
|
||||
groups = {snappy = 3, flammable = 3, attached_node = 1, not_in_creative_inventory = 1},
|
||||
sounds = mobs.node_sound_leaves_defaults(),
|
||||
selection_box = {
|
||||
type = "fixed", fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -0.25, 6 / 16},
|
||||
},
|
||||
on_construct = function(pos)
|
||||
core.get_node_timer(pos):start(1)
|
||||
if mod_mese then mesecon.receptor_on(pos) end
|
||||
end,
|
||||
on_timer = function(pos)
|
||||
core.set_node(pos, {name = "mobs:hearing_vines"})
|
||||
if mod_mese then mesecon.receptor_off(pos) end
|
||||
end
|
||||
})
|
38
mods/mobs/init.lua
Normal file
|
@ -0,0 +1,38 @@
|
|||
|
||||
local S = core.get_translator("mobs")
|
||||
|
||||
-- peaceful player privilege
|
||||
|
||||
core.register_privilege("peaceful_player", {
|
||||
description = "Prevents Mobs Redo mobs from attacking player",
|
||||
give_to_singleplayer = false
|
||||
})
|
||||
|
||||
-- fallback node
|
||||
|
||||
core.register_node("mobs:fallback_node", {
|
||||
description = S("Fallback Node"),
|
||||
tiles = {"mobs_fallback.png"},
|
||||
is_ground_content = false,
|
||||
groups = {handy = 1, crumbly = 3, not_in_creative_inventory = 1},
|
||||
drop = ""
|
||||
})
|
||||
|
||||
|
||||
local path = core.get_modpath("mobs")
|
||||
|
||||
dofile(path .. "/api.lua") -- mob API
|
||||
|
||||
dofile(path .. "/mount.lua") -- rideable mobs
|
||||
|
||||
dofile(path .. "/crafts.lua") -- items and crafts
|
||||
|
||||
dofile(path .. "/spawner.lua") -- mob spawner
|
||||
|
||||
-- Lucky Blocks
|
||||
|
||||
if core.get_modpath("lucky_block") then
|
||||
dofile(path .. "/lucky_block.lua")
|
||||
end
|
||||
|
||||
print("[MOD] Mobs Redo loaded")
|
43
mods/mobs/license.txt
Normal file
|
@ -0,0 +1,43 @@
|
|||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2025 TenPlus1
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
Textures borrowed from minetest_game (CC BY-SA 3.0):
|
||||
mobs_tnt_smoke.png
|
||||
mobs_bubble_particle.png
|
||||
mobs_heart_particle.png
|
||||
|
||||
Textures under CC0 license by TenPlus1
|
||||
|
||||
mobs_fallback.png is dirt texture from original Minetest (CC-BY SA 3.0)
|
||||
|
||||
|
||||
ShadowNinja (CC BY-SA 3.0):
|
||||
tnt_smoke.png
|
||||
|
||||
mobs_swing.ogg by qubodup (CC0)
|
||||
- http://freesound.org/people/qubodup/sounds/60012/
|
||||
|
||||
mobs_spell.ogg by littlerobotsoundfactory (CC0)
|
||||
- http://freesound.org/people/LittleRobotSoundFactory/sounds/270396/
|
||||
|
||||
mobs_punch.ogg by Merrick079 (CC0)
|
||||
- https://freesound.org/people/Merrick079/sounds/566436/
|
38
mods/mobs/locale/mobs.de.tr
Normal file
|
@ -0,0 +1,38 @@
|
|||
# textdomain: mobs
|
||||
** Peaceful Mode Active - No Monsters Will Spawn=** Friedlicher Modus aktiv - Es werden keine Monster spawnen
|
||||
Active Mob Limit Reached!=Aktives Mob-Limit erreicht!
|
||||
Mob has been protected!=Kreatur wurde geschützt!
|
||||
@1 (Tamed)=@1 (Gezähmt)
|
||||
Not tamed!=Nicht gezähmt!
|
||||
@1 is owner!=@1 ist der Besitzer!
|
||||
Missed!=Daneben!
|
||||
Already protected!=Bereits geschützt!
|
||||
@1 has been tamed!=@1 wurde gezähmt!
|
||||
@1 follows:=@1 folgt:
|
||||
@1 mobs removed.=@1 Mobs entfernt.
|
||||
Enter name:=Namen eingeben:
|
||||
Rename=Umbenennen
|
||||
Name Tag=Namensschild
|
||||
Leather=Leder
|
||||
Raw Meat=Rohes Fleisch
|
||||
Meat=Fleisch
|
||||
Lasso (right-click animal to put in inventory)=Lasso (Rechtsklick auf Tier, um es zu nehmen)
|
||||
Net (right-click animal to put in inventory)=Netz (Rechtsklick auf Tier, um es zu nehmen)
|
||||
Steel Shears (right-click to shear)=Stahlschere (Rechtsklick zum Scheren)
|
||||
Mob Protection Rune=Kreaturschutzrune
|
||||
Mob Protection Rune (Level 2)=Kreaturschutzrune (Level 2)
|
||||
Saddle=Sattel
|
||||
Mob Fence=Kreaturen Zaun
|
||||
Mob Fence Top=Kreaturen Zaun Oberteil
|
||||
Mob Reset Stick=Kreatur reset Stock
|
||||
Meat Block=Fleischblock
|
||||
Raw Meat Block=Roher Fleischblock
|
||||
Enter texture:=Textur eingeben:
|
||||
Change=Ändern
|
||||
Mob Spawner=Kreaturenspawner
|
||||
(mob name) (min light) (max light) (amount) (player distance) (Y offset)=(Kreaturenname) (Min. Licht) (Max. Licht) (Anzahl) (Spielerabstand) (Y-Offset)
|
||||
Command:=Befehl:
|
||||
Spawner Not Active (enter settings)=Nicht aktiv (Einstellungen eingeben)
|
||||
Spawner Active (@1)=Spawner aktiv (@1)
|
||||
Mob Spawner settings failed!=Kreaturenspawner-Einstellungen gescheitert!
|
||||
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]”=
|
38
mods/mobs/locale/mobs.en.tr
Normal file
|
@ -0,0 +1,38 @@
|
|||
# textdomain: mobs
|
||||
** Peaceful Mode Active - No Monsters Will Spawn=
|
||||
Active Mob Limit Reached!=
|
||||
Mob has been protected!=
|
||||
@1 (Tamed)=
|
||||
Not tamed!=
|
||||
@1 is owner!=
|
||||
Missed!=
|
||||
Already protected!=
|
||||
@1 has been tamed!=
|
||||
@1 follows:=
|
||||
@1 mobs removed.=
|
||||
Enter name:=
|
||||
Rename=
|
||||
Name Tag=
|
||||
Leather=
|
||||
Raw Meat=
|
||||
Meat=
|
||||
Lasso (right-click animal to put in inventory)=
|
||||
Net (right-click animal to put in inventory)=
|
||||
Steel Shears (right-click to shear)=
|
||||
Mob Protection Rune=
|
||||
Mob Protection Rune (Level 2)=
|
||||
Saddle=
|
||||
Mob Fence=
|
||||
Mob Fence Top=
|
||||
Mob Reset Stick=
|
||||
Meat Block=
|
||||
Raw Meat Block=
|
||||
Enter texture:=
|
||||
Change=
|
||||
Mob Spawner=
|
||||
(mob name) (min light) (max light) (amount) (player distance) (Y offset)=
|
||||
Command:=
|
||||
Spawner Not Active (enter settings)=
|
||||
Spawner Active (@1)=
|
||||
Mob Spawner settings failed!=
|
||||
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]”=
|
38
mods/mobs/locale/mobs.es.tr
Normal file
|
@ -0,0 +1,38 @@
|
|||
# textdomain: mobs
|
||||
** Peaceful Mode Active - No Monsters Will Spawn=
|
||||
Active Mob Limit Reached!=
|
||||
Mob has been protected!=El mob ha sido protegido!
|
||||
@1 (Tamed)=@1 (Domesticado)
|
||||
Not tamed!=No domesticado!
|
||||
@1 is owner!=@1 es el dueño!
|
||||
Missed!=Perdido!
|
||||
Already protected!=Ya está protegido!
|
||||
@1 has been tamed!=@1 ha sido domesticado!
|
||||
@1 follows:=
|
||||
@1 mobs removed.=
|
||||
Enter name:=Ingrese nombre:
|
||||
Rename=Renombrar
|
||||
Name Tag=Nombrar etiqueta
|
||||
Leather=Cuero
|
||||
Raw Meat=Carne cruda
|
||||
Meat=Carne
|
||||
Lasso (right-click animal to put in inventory)=Lazo (click derecho en animal para colocar en inventario)
|
||||
Net (right-click animal to put in inventory)=Red (click derecho en animal para colocar en inventario)
|
||||
Steel Shears (right-click to shear)=Tijera de acero (click derecho para esquilar)
|
||||
Mob Protection Rune=Runa de protección de Mob
|
||||
Mob Protection Rune (Level 2)=
|
||||
Saddle=Montura
|
||||
Mob Fence=
|
||||
Mob Fence Top=
|
||||
Mob Reset Stick=
|
||||
Meat Block=
|
||||
Raw Meat Block=
|
||||
Enter texture:=
|
||||
Change=
|
||||
Mob Spawner=
|
||||
(mob name) (min light) (max light) (amount) (player distance) (Y offset)=
|
||||
Command:=
|
||||
Spawner Not Active (enter settings)=Generador no activo (ingrese config)
|
||||
Spawner Active (@1)=Generador activo (@1)
|
||||
Mob Spawner settings failed!=Configuracion de generador de Mob falló!
|
||||
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]”=
|
38
mods/mobs/locale/mobs.fr.tr
Normal file
|
@ -0,0 +1,38 @@
|
|||
# textdomain: mobs
|
||||
** Peaceful Mode Active - No Monsters Will Spawn=** Mode pacifique activé - aucun monstre ne sera généré
|
||||
Active Mob Limit Reached!=Limite atteinte du nombre des êtres vivants actifs !
|
||||
Mob has been protected!=L'animal a été protégé !
|
||||
@1 (Tamed)=@1 (apprivoisé)
|
||||
Not tamed!=Non-apprivoisé !
|
||||
@1 is owner!=Appartient à @1 !
|
||||
Missed!=Raté !
|
||||
Already protected!=Déjà protégé !
|
||||
@1 has been tamed!=@1 a été apprivoisé !
|
||||
@1 follows:=
|
||||
@1 mobs removed.=
|
||||
Enter name:=Saisissez un nom :
|
||||
Rename=Renommer
|
||||
Name Tag=Étiquette de collier
|
||||
Leather=Cuir
|
||||
Raw Meat=Viande crue
|
||||
Meat=Viande
|
||||
Lasso (right-click animal to put in inventory)=Lasso (clic droit sur l'animal pour le mettre dans l'inventaire)
|
||||
Net (right-click animal to put in inventory)=Filet (clic droit sur l'animal pour le mettre dans l'inventaire)
|
||||
Steel Shears (right-click to shear)=Ciseaux à laine (clic droit pour tondre)
|
||||
Mob Protection Rune=Rune de protection des animaux
|
||||
Mob Protection Rune (Level 2)=
|
||||
Saddle=Selle
|
||||
Mob Fence= Clôture à animaux
|
||||
Mob Fence Top=Haut de clôture à animaux
|
||||
Mob Reset Stick=Baguette de réinitialisation des êtres vivants
|
||||
Meat Block=
|
||||
Raw Meat Block=
|
||||
Enter texture:=Saisissez une texture :
|
||||
Change=Changer
|
||||
Mob Spawner=Créateur d'êtres vivants
|
||||
(mob name) (min light) (max light) (amount) (player distance) (Y offset)=
|
||||
Command:=Commande :
|
||||
Spawner Not Active (enter settings)=Créateur non actif (entrez les paramètres)
|
||||
Spawner Active (@1)=Créateur actif (@1)
|
||||
Mob Spawner settings failed!=Échec des paramètres du créateur d'être vivants !
|
||||
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]»
|
38
mods/mobs/locale/mobs.it.tr
Normal file
|
@ -0,0 +1,38 @@
|
|||
# textdomain: mobs
|
||||
** Peaceful Mode Active - No Monsters Will Spawn=** Modalità pacifica attiva - non comparirà nessun mostro
|
||||
Active Mob Limit Reached!=
|
||||
Mob has been protected!=Il mob è stato protetto!
|
||||
@1 (Tamed)=@1 (Addomesticato)
|
||||
Not tamed!=Non addomesticato!
|
||||
@1 is owner!=Il padrone è @1!
|
||||
Missed!=Mancato!
|
||||
Already protected!=Già protetto!
|
||||
@1 has been tamed!=@1 è stato addomesticato!
|
||||
@1 follows:=
|
||||
@1 mobs removed.=
|
||||
Enter name:=Inserire il nome:
|
||||
Rename=Rinomina
|
||||
Name Tag=Targhetta
|
||||
Leather=Pelle
|
||||
Raw Meat=Carne cruda
|
||||
Meat=Carne
|
||||
Lasso (right-click animal to put in inventory)=Lazo (click di destro per mettere l'animale nell'inventario)
|
||||
Net (right-click animal to put in inventory)=Rete (click destro per mettere l'animale nell'inventario)
|
||||
Steel Shears (right-click to shear)=Cesoie d'acciaio (click destro per tosare)
|
||||
Mob Protection Rune=Runa di protezione per mob
|
||||
Mob Protection Rune (Level 2)=
|
||||
Saddle=Sella
|
||||
Mob Fence=Recinzione per mob
|
||||
Mob Fence Top=
|
||||
Mob Reset Stick=
|
||||
Meat Block=
|
||||
Raw Meat Block=
|
||||
Enter texture:=
|
||||
Change=
|
||||
Mob Spawner=
|
||||
(mob name) (min light) (max light) (amount) (player distance) (Y offset)=
|
||||
Command:=
|
||||
Spawner Not Active (enter settings)=Generatore inattivo (inserire le impostazioni)
|
||||
Spawner Active (@1)=Generatore attivo (@1)
|
||||
Mob Spawner settings failed!=Impostazioni del generatore di mob fallite!
|
||||
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]”=
|
38
mods/mobs/locale/mobs.ms.tr
Normal file
|
@ -0,0 +1,38 @@
|
|||
# textdomain: mobs
|
||||
** Peaceful Mode Active - No Monsters Will Spawn=** Mod Aman Diaktifkan - Tiada Raksasa Akan Muncul
|
||||
Active Mob Limit Reached!=
|
||||
Mob has been protected!=Mob telah pun dilindungi!
|
||||
@1 (Tamed)=@1 (Jinak)
|
||||
Not tamed!=Belum dijinakkan!
|
||||
@1 is owner!=Ini hak milik @1!
|
||||
Missed!=Terlepas!
|
||||
Already protected!=Telah dilindungi!
|
||||
@1 has been tamed!=@1 telah dijinakkan!
|
||||
@1 follows:=
|
||||
@1 mobs removed.=
|
||||
Enter name:=Masukkan nama:
|
||||
Rename=Namakan semula
|
||||
Name Tag=Tanda Nama
|
||||
Leather=Kulit
|
||||
Raw Meat=Daging Mentah
|
||||
Meat=Daging Bakar
|
||||
Lasso (right-click animal to put in inventory)=Tanjul (klik-kanan haiwan untuk masukkan ke inventori)
|
||||
Net (right-click animal to put in inventory)=Jaring (klik-kanan haiwan untuk masukkan ke inventori)
|
||||
Steel Shears (right-click to shear)=Ketam Keluli (klik-kanan untuk mengetam bulu biri-biri)
|
||||
Mob Protection Rune=Rune Perlindungan Mob
|
||||
Mob Protection Rune (Level 2)=
|
||||
Saddle=Pelana
|
||||
Mob Fence=Pagar Mob
|
||||
Mob Fence Top=
|
||||
Mob Reset Stick=
|
||||
Meat Block=
|
||||
Raw Meat Block=
|
||||
Enter texture:=
|
||||
Change=
|
||||
Mob Spawner=
|
||||
(mob name) (min light) (max light) (amount) (player distance) (Y offset)=
|
||||
Command:=
|
||||
Spawner Not Active (enter settings)=Pewujud Mob Tidak Aktif (masukkan tetapan)
|
||||
Spawner Active (@1)=Pewujud Mob Aktif (@1)
|
||||
Mob Spawner settings failed!=Penetapan Pewujud Mob gagal!
|
||||
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]”=
|
38
mods/mobs/locale/mobs.pt.tr
Normal file
|
@ -0,0 +1,38 @@
|
|||
# textdomain: mobs
|
||||
** Peaceful Mode Active - No Monsters Will Spawn=
|
||||
Active Mob Limit Reached!=
|
||||
Mob has been protected!=
|
||||
@1 (Tamed)=
|
||||
Not tamed!=Indomesticado!
|
||||
@1 is owner!=Dono @1!
|
||||
Missed!=Faltou!
|
||||
Already protected!=
|
||||
@1 has been tamed!=@1 foi domesticado!
|
||||
@1 follows:=
|
||||
@1 mobs removed.=
|
||||
Enter name:=Insira um nome:
|
||||
Rename=Renomear
|
||||
Name Tag=Etiqueta
|
||||
Leather=Couro
|
||||
Raw Meat=Carne crua
|
||||
Meat=Carne
|
||||
Lasso (right-click animal to put in inventory)=Laço (clique-direito no animal para por no inventario)
|
||||
Net (right-click animal to put in inventory)=Net (clique-direito no animal para por no inventario)
|
||||
Steel Shears (right-click to shear)=Tesoura de Aço (clique-direito para tosquiar)
|
||||
Mob Protection Rune=
|
||||
Mob Protection Rune (Level 2)=
|
||||
Saddle=
|
||||
Mob Fence=
|
||||
Mob Fence Top=
|
||||
Mob Reset Stick=
|
||||
Meat Block=
|
||||
Raw Meat Block=
|
||||
Enter texture:=
|
||||
Change=
|
||||
Mob Spawner=
|
||||
(mob name) (min light) (max light) (amount) (player distance) (Y offset)=
|
||||
Command:=
|
||||
Spawner Not Active (enter settings)=Spawnador Inativo (configurar)
|
||||
Spawner Active (@1)=Spawnador Ativo (@1)
|
||||
Mob Spawner settings failed!=Configuraçao de Spawnador do Mob falhou!
|
||||
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]”=
|
38
mods/mobs/locale/mobs.pt_BR.tr
Normal file
|
@ -0,0 +1,38 @@
|
|||
# textdomain: mobs
|
||||
** Peaceful Mode Active - No Monsters Will Spawn=
|
||||
Active Mob Limit Reached!=Limite de Mob Ativo Atingido!
|
||||
Mob has been protected!=Mob foi protegido
|
||||
@1 (Tamed)=@1 (Domesticado)
|
||||
Not tamed!=Não domesticado!
|
||||
@1 is owner!=Dono @1!
|
||||
Missed!=Faltou!
|
||||
Already protected!=
|
||||
@1 has been tamed!=@1 foi domesticado!
|
||||
@1 follows:=@1 Segue:
|
||||
@1 mobs removed.=@1 mobs removido.
|
||||
Enter name:=Insira um nome:
|
||||
Rename=Renomear
|
||||
Name Tag=Etiqueta
|
||||
Leather=Couro
|
||||
Raw Meat=Carne crua
|
||||
Meat=Carne
|
||||
Lasso (right-click animal to put in inventory)=Laço (clique-direito no animal para por no inventario)
|
||||
Net (right-click animal to put in inventory)=Net (clique-direito no animal para por no inventario)
|
||||
Steel Shears (right-click to shear)=Tesoura de Aço (clique-direito para tosquiar)
|
||||
Mob Protection Rune=Runa de Proteção para Mob
|
||||
Mob Protection Rune (Level 2)=Runa de Proteção para Mob (Nivel 2)
|
||||
Saddle=Sela
|
||||
Mob Fence= Cerca para mob
|
||||
Mob Fence Top= Topo da cerca para mob
|
||||
Mob Reset Stick=
|
||||
Meat Block=Bloco de carne
|
||||
Raw Meat Block=Bloco de Carne crua
|
||||
Enter texture:=Insira a textura:
|
||||
Change=Mudar
|
||||
Mob Spawner=Spawner de mob
|
||||
(mob name) (min light) (max light) (amount) (player distance) (Y offset)=(Nome do mob) (min light) (max light) (amount) (player distance) (Y offset)
|
||||
Command:=Comando:
|
||||
Spawner Not Active (enter settings)=Spawner Inativo (configurar)
|
||||
Spawner Active (@1)=Spawner Ativo (@1)
|
||||
Mob Spawner settings failed!=Configuraçao de Spawner do Mob falhou!
|
||||
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]”=
|
38
mods/mobs/locale/mobs.ru.tr
Normal file
|
@ -0,0 +1,38 @@
|
|||
# textdomain: mobs
|
||||
** Peaceful Mode Active - No Monsters Will Spawn=** Мирный Режим Активен - Никаких Монстров Не Появиться
|
||||
Active Mob Limit Reached!=Лимит Активных Мобов Достигнут!
|
||||
Mob has been protected!=Моб был защищён!
|
||||
@1 (Tamed)=@1 (Прирученный)
|
||||
Not tamed!=Не прирученный!
|
||||
@1 is owner!=@1 владелец!
|
||||
Missed!=Промазал!
|
||||
Already protected!=Уже защищён!
|
||||
@1 has been tamed!=@1 был приручен!
|
||||
@1 follows:=@1 следует:
|
||||
@1 mobs removed.=@1 мобов удалено.
|
||||
Enter name:=Введите имя:
|
||||
Rename=Переименовать
|
||||
Name Tag=Новый Тег
|
||||
Leather=Кожа
|
||||
Raw Meat=Сырое Мясо
|
||||
Meat=Мясо
|
||||
Lasso (right-click animal to put in inventory)=Лассо (Правый клик - положить животное в инвентарь)
|
||||
Net (right-click animal to put in inventory)=Сеть (Правый клик - положить животное в инвентарь)
|
||||
Steel Shears (right-click to shear)=Железные Ножницы (Правый клик - подстричь)
|
||||
Mob Protection Rune=Руна Защиты Моба
|
||||
Mob Protection Rune (Level 2)=Руна Защиты Моба (2 Уровень)
|
||||
Saddle=Седло
|
||||
Mob Fence=Забор для Мобов
|
||||
Mob Fence Top=Верхний Забор для Мобов
|
||||
Mob Reset Stick=Палка Сброса Моба
|
||||
Meat Block=Мясной Блок
|
||||
Raw Meat Block=Сырой Мясной Блок
|
||||
Enter texture:=Введите текстуру:
|
||||
Change=Изменить
|
||||
Mob Spawner=Спавнер Мобов
|
||||
(mob name) (min light) (max light) (amount) (player distance) (Y offset)=(имя моба) (минимальный свет) (максимальный свет) (количество) (дистанция игрока) (смещение Y)
|
||||
Command:=Команда:
|
||||
Spawner Not Active (enter settings)=Спавнер Не Активен (введите настройки)
|
||||
Spawner Active (@1)=Спавнер Активен (@1)
|
||||
Mob Spawner settings failed!=Настроить Спавнер Мобов не удалось!
|
||||
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]”=Синтаксис: “имя мин_свет[0-14] макс_свет[0-14] макс_мобов_в_зоне[0 чтобы выключить] дистанция_игроков[1-20] смещение_y[-10 to 10]”
|
38
mods/mobs/locale/mobs.tr.tr
Normal file
|
@ -0,0 +1,38 @@
|
|||
# textdomain: mobs
|
||||
** Peaceful Mode Active - No Monsters Will Spawn=
|
||||
Active Mob Limit Reached!=
|
||||
Mob has been protected!=
|
||||
@1 (Tamed)=
|
||||
Not tamed!=Evcil değil!
|
||||
@1 is owner!=Sahibi @1!
|
||||
Missed!=Kaçırdın!
|
||||
Already protected!=
|
||||
@1 has been tamed!=@1 tamamen evcilleştirilmiştir!
|
||||
@1 follows:=
|
||||
@1 mobs removed.=
|
||||
Enter name:=İsim gir:
|
||||
Rename=Yeniden adlandır
|
||||
Name Tag=İsim etiketi
|
||||
Leather=Deri
|
||||
Raw Meat=Çiğ et
|
||||
Meat=Et
|
||||
Lasso (right-click animal to put in inventory)=Kement (hayvana sağ tıklayarak envantere koy)
|
||||
Net (right-click animal to put in inventory)=Ağ (hayvana sağ tıklayarak envantere koy)
|
||||
Steel Shears (right-click to shear)=Çelik makas (sağ tıklayarak kes)
|
||||
Mob Protection Rune=
|
||||
Mob Protection Rune (Level 2)=
|
||||
Saddle=
|
||||
Mob Fence=Canavar Yaratıcı
|
||||
Mob Fence Top=
|
||||
Mob Reset Stick=
|
||||
Meat Block=
|
||||
Raw Meat Block=
|
||||
Enter texture:=
|
||||
Change=
|
||||
Mob Spawner=
|
||||
(mob name) (min light) (max light) (amount) (player distance) (Y offset)=
|
||||
Command:=
|
||||
Spawner Not Active (enter settings)=Yaratıcı aktif değil (ayarlara gir)
|
||||
Spawner Active (@1)=Yaratıcı aktif (@1)
|
||||
Mob Spawner settings failed!=Yaratıcı ayarları uygulanamadı.
|
||||
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]”=
|
43
mods/mobs/locale/mobs.uk.tr
Normal file
|
@ -0,0 +1,43 @@
|
|||
# textdomain: mobs
|
||||
Mobs Redo API=API для мобів
|
||||
Simple and feature rich API to quickly add mobs into your world.=Простий і функціональний API для швидкого додавання мобів у світ.
|
||||
Adds a mob api for mods to add animals or monsters etc.=Додає API для модів про тварин, монстрів тощо.
|
||||
** Peaceful Mode Active - No Monsters Will Spawn=** Під час мирного режиму моби не спавняться
|
||||
Active Mob Limit Reached!=Ліміт активних мобів досягнуто!
|
||||
Mob has been protected!=Моб був захищений!
|
||||
@1 (Tamed)=@1 (Приручений)
|
||||
Not tamed!=Не приручений!
|
||||
@1 is owner!=@1 є власником!
|
||||
Missed!=Промах!
|
||||
Already protected!=Уже захищено!
|
||||
@1 has been tamed!=@1 приручено!
|
||||
@1 follows:=@1 слідує:
|
||||
@1 mobs removed.=@1 мобів видалено.
|
||||
Enter name:=Введіть ім'я:
|
||||
Rename=Перейменувати
|
||||
Name Tag=Теґ для назви
|
||||
Mob Repellent=Відлякувач мобів
|
||||
Hearing Vines=Чутливі ліани
|
||||
Leather=Шкіра
|
||||
Raw Meat=Сире м'ясо
|
||||
Meat=М'ясо
|
||||
Lasso (right-click animal to put in inventory)=Ласо (ПКМ - покласти тварину в інвентар)
|
||||
Net (right-click animal to put in inventory)=Сітка (ПКМ - покласти тварину в інвентар)
|
||||
Steel Shears (right-click to shear)=Залізні ножиці (ПКМ - підстригти)
|
||||
Mob Protection Rune=Руна Захисту Мобу
|
||||
Mob Protection Rune (Level 2)=Руна Захисту Мобу (II рівень)
|
||||
Saddle=Сідло
|
||||
Mob Fence=Паркан для мобів
|
||||
Mob Fence Top=Верхній паркан для мобів
|
||||
Mob Reset Stick=Палиця скидання мобу
|
||||
Meat Block=М'ясний блок
|
||||
Raw Meat Block=Сирий м'ясний блок
|
||||
Enter texture:=Введіть текстуру:
|
||||
Change=Змінити
|
||||
Mob Spawner=Спавнер мобів
|
||||
(mob name) (min light) (max light) (amount) (player distance) (Y offset)=(ім'я мобу) (мін. світло) (макс. світло) (кількість) (дистанція гравця) (зміщення Y)
|
||||
Command:=Команда:
|
||||
Spawner Not Active (enter settings)=Спавнер не активний (введіть налаштування)
|
||||
Spawner Active (@1)=Спавнер активний (@1)
|
||||
Mob Spawner settings failed!=Не вдалося налаштувати спавнер мобів!
|
||||
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]”=Синтаксис: “ім'я мін.світло[0-14] макс.світло[0-14] макс_мобів_у_зоні[0 для вимкнення] дистанція_гравців[1-20] зміщення_y[-10 до 10]”
|
38
mods/mobs/locale/mobs.zh_CN.tr
Normal file
|
@ -0,0 +1,38 @@
|
|||
# textdomain: mobs
|
||||
** Peaceful Mode Active - No Monsters Will Spawn=** 和平模式已激活——没有怪物会产生
|
||||
Active Mob Limit Reached!=
|
||||
Mob has been protected!=Mob 已经被保护了!
|
||||
@1 (Tamed)=@1(已驯服)
|
||||
Not tamed!=没有驯服!
|
||||
@1 is owner!=@1 是主人
|
||||
Missed!=没抓住!
|
||||
Already protected!=已经被保护!
|
||||
@1 has been tamed!=@1已经被驯服!
|
||||
@1 follows:=
|
||||
@1 mobs removed.=
|
||||
Enter name:=输入名称:
|
||||
Rename=重新命名
|
||||
Name Tag=名称标签
|
||||
Leather=皮革
|
||||
Raw Meat=生肉
|
||||
Meat=肉
|
||||
Lasso (right-click animal to put in inventory)=套索(右键单击动物以放入物品栏)
|
||||
Net (right-click animal to put in inventory)=网(右键单击动物以放入物品栏)
|
||||
Steel Shears (right-click to shear)=钢剪(右键单击以剪切)
|
||||
Mob Protection Rune=Mob 保护符文
|
||||
Mob Protection Rune (Level 2)=
|
||||
Saddle=鞍
|
||||
Mob Fence=Mob 栅栏
|
||||
Mob Fence Top=
|
||||
Mob Reset Stick=
|
||||
Meat Block=
|
||||
Raw Meat Block=
|
||||
Enter texture:=
|
||||
Change=
|
||||
Mob Spawner=
|
||||
(mob name) (min light) (max light) (amount) (player distance) (Y offset)=
|
||||
Command:=
|
||||
Spawner Not Active (enter settings)=孵化器未使用(输入设置)
|
||||
Spawner Active (@1)=孵化器正在运转(@1)
|
||||
Mob Spawner settings failed!=Mob 孵化器设置失败!
|
||||
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]”=
|
38
mods/mobs/locale/mobs.zh_TW.tr
Normal file
|
@ -0,0 +1,38 @@
|
|||
# textdomain: mobs
|
||||
** Peaceful Mode Active - No Monsters Will Spawn=** 和平模式已激活——沒有怪物會產生
|
||||
Active Mob Limit Reached!=
|
||||
Mob has been protected!=Mob 已經被保護了!
|
||||
@1 (Tamed)=@1(已馴服)
|
||||
Not tamed!=沒有馴服!
|
||||
@1 is owner!=@1 是主人
|
||||
Missed!=沒抓住!
|
||||
Already protected!=已經被保護!
|
||||
@1 has been tamed!=@1已經被馴服!
|
||||
@1 follows:=
|
||||
@1 mobs removed.=
|
||||
Enter name:=輸入名稱:
|
||||
Rename=重新命名
|
||||
Name Tag=名稱標籤
|
||||
Leather=皮革
|
||||
Raw Meat=生肉
|
||||
Meat=肉
|
||||
Lasso (right-click animal to put in inventory)=套索(右鍵單擊動物以放入物品欄)
|
||||
Net (right-click animal to put in inventory)=網(右鍵單擊動物以放入物品欄)
|
||||
Steel Shears (right-click to shear)=鋼剪(右鍵單擊以剪切)
|
||||
Mob Protection Rune=Mob 保護符文
|
||||
Mob Protection Rune (Level 2)=
|
||||
Saddle=鞍
|
||||
Mob Fence=Mob 柵欄
|
||||
Mob Fence Top=
|
||||
Mob Reset Stick=
|
||||
Meat Block=
|
||||
Raw Meat Block=
|
||||
Enter texture:=
|
||||
Change=
|
||||
Mob Spawner=
|
||||
(mob name) (min light) (max light) (amount) (player distance) (Y offset)=
|
||||
Command:=
|
||||
Spawner Not Active (enter settings)=孵化器未使用(輸入設置)
|
||||
Spawner Active (@1)=孵化器正在運轉(@1)
|
||||
Mob Spawner settings failed!=Mob 孵化器設置失敗!
|
||||
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]”=
|
38
mods/mobs/locale/template.txt
Normal file
|
@ -0,0 +1,38 @@
|
|||
# textdomain: mobs
|
||||
** Peaceful Mode Active - No Monsters Will Spawn=
|
||||
Active Mob Limit Reached!=
|
||||
Mob has been protected!=
|
||||
@1 (Tamed)=
|
||||
Not tamed!=
|
||||
@1 is owner!=
|
||||
Missed!=
|
||||
Already protected!=
|
||||
@1 has been tamed!=
|
||||
@1 follows:=
|
||||
@1 mobs removed.=
|
||||
Enter name:=
|
||||
Rename=
|
||||
Name Tag=
|
||||
Leather=
|
||||
Raw Meat=
|
||||
Meat=
|
||||
Lasso (right-click animal to put in inventory)=
|
||||
Net (right-click animal to put in inventory)=
|
||||
Steel Shears (right-click to shear)=
|
||||
Mob Protection Rune=
|
||||
Mob Protection Rune (Level 2)=
|
||||
Saddle=
|
||||
Mob Fence=
|
||||
Mob Fence Top=
|
||||
Mob Reset Stick=
|
||||
Meat Block=
|
||||
Raw Meat Block=
|
||||
Enter texture:=
|
||||
Change=
|
||||
Mob Spawner=
|
||||
(mob name) (min light) (max light) (amount) (player distance) (Y offset)=
|
||||
Command:=
|
||||
Spawner Not Active (enter settings)=
|
||||
Spawner Active (@1)=
|
||||
Mob Spawner settings failed!=
|
||||
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]”=
|
98
mods/mobs/lucky_block.lua
Normal file
|
@ -0,0 +1,98 @@
|
|||
|
||||
local S = core.get_translator("mobs")
|
||||
|
||||
-- add lucky blocks
|
||||
|
||||
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"},
|
||||
{"dro", {"mobs:mob_repellent"}, 1}
|
||||
})
|
||||
|
||||
-- pint sized rune, use on tamed mob to shrink to half-size
|
||||
|
||||
core.register_craftitem(":mobs:pint_sized_rune", {
|
||||
description = S("Pint Sized Rune"),
|
||||
inventory_image = "mobs_pint_sized_rune.png",
|
||||
groups = {flammable = 2},
|
||||
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
|
||||
if pointed_thing.type ~= "object" then return end
|
||||
|
||||
local name = user and user:get_player_name() or ""
|
||||
local tool = user and user:get_wielded_item()
|
||||
local tool_name = tool:get_name()
|
||||
|
||||
if tool_name ~= "mobs:pint_sized_rune" then return end
|
||||
|
||||
local self = pointed_thing.ref:get_luaentity()
|
||||
|
||||
if not self._cmi_is_mob then
|
||||
core.chat_send_player(name, S("Not a Mobs Redo mob!"))
|
||||
return
|
||||
end
|
||||
|
||||
if not self.tamed then
|
||||
core.chat_send_player(name, S("Not tamed!"))
|
||||
return
|
||||
end
|
||||
|
||||
if self.pint_size_potion then
|
||||
core.chat_send_player(name, S("Potion already applied!"))
|
||||
return
|
||||
end
|
||||
|
||||
if not mobs.is_creative(user:get_player_name()) then
|
||||
tool:take_item() -- take 1 rune
|
||||
user:set_wielded_item(tool)
|
||||
end
|
||||
|
||||
local pos = self.object:get_pos()
|
||||
local prop = self.object:get_properties()
|
||||
|
||||
vis_size = {x = self.base_size.x * .5, y = self.base_size.y * .5}
|
||||
|
||||
self.base_size = vis_size
|
||||
|
||||
colbox = {
|
||||
self.base_colbox[1] * .5, self.base_colbox[2] * .5,
|
||||
self.base_colbox[3] * .5, self.base_colbox[4] * .5,
|
||||
self.base_colbox[5] * .5, self.base_colbox[6] * .5}
|
||||
|
||||
self.base_colbox = colbox
|
||||
|
||||
selbox = {
|
||||
self.base_selbox[1] * .5, self.base_selbox[2] * .5,
|
||||
self.base_selbox[3] * .5, self.base_selbox[4] * .5,
|
||||
self.base_selbox[5] * .5, self.base_selbox[6] * .5}
|
||||
|
||||
self.base_selbox = selbox
|
||||
|
||||
self.object:set_properties(
|
||||
{visual_size = vis_size, collisionbox = colbox, selectionbox = selbox})
|
||||
|
||||
self.pint_size_potion = true
|
||||
|
||||
pos.y = pos.y + prop.collisionbox[5]
|
||||
|
||||
mobs:effect(pos, 25, "mobs_protect_particle.png", 0.5, 4, 2, 15)
|
||||
|
||||
self:mob_sound("mobs_spell")
|
||||
end
|
||||
})
|
||||
|
||||
core.register_craft({
|
||||
output = "lucky_block:pint_sized_rune",
|
||||
recipe = {{"lucky_block:pint_sized_potion", "mobs:protector"}}
|
||||
})
|
7
mods/mobs/mod.conf
Normal file
|
@ -0,0 +1,7 @@
|
|||
name = mobs
|
||||
description = Adds a mob api for mods to add animals or monsters etc.
|
||||
optional_depends = default, tnt, invisibility, lucky_block, cmi, toolranks, pathfinder, player_api, mtobjid, visual_harm_1ndicators, mcl_sounds, mesecons
|
||||
min_minetest_version = 5.0
|
||||
release = 30946
|
||||
author = TenPlus1
|
||||
title = Mobs Redo API
|
489
mods/mobs/mount.lua
Normal file
|
@ -0,0 +1,489 @@
|
|||
|
||||
-- lib_mount by Blert2112 (edited by TenPlus1)
|
||||
|
||||
local is_mc2 = core.get_modpath("mcl_mobs") -- MineClone2 check
|
||||
|
||||
-- one of these is needed to ride mobs, otherwise no riding for you
|
||||
|
||||
if not core.get_modpath("player_api") and not is_mc2 then
|
||||
|
||||
function mobs.attach() end
|
||||
function mobs.detach() end
|
||||
function mobs.fly() end
|
||||
function mobs.drive() end
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
-- Localise some functions
|
||||
|
||||
local abs, cos, floor, sin, sqrt, pi =
|
||||
math.abs, math.cos, math.floor, math.sin, math.sqrt, math.pi
|
||||
|
||||
-- helper functions
|
||||
|
||||
local function node_is(entity)
|
||||
|
||||
if not entity.standing_on then return "other" end
|
||||
|
||||
if entity.standing_on == "air" then return "air" end
|
||||
|
||||
local def = core.registered_nodes[entity.standing_on]
|
||||
|
||||
if def.groups.lava then return "lava" end
|
||||
if def.groups.liquid then return "liquid" end
|
||||
if def.groups.walkable then return "walkable" end
|
||||
|
||||
return "other"
|
||||
end
|
||||
|
||||
|
||||
local function get_sign(i)
|
||||
|
||||
if not i or i == 0 then return 0 end
|
||||
|
||||
return i / abs(i)
|
||||
end
|
||||
|
||||
|
||||
local function get_velocity(v, yaw, y)
|
||||
|
||||
local x = -sin(yaw) * v
|
||||
local z = cos(yaw) * v
|
||||
|
||||
return {x = x, y = y, z = z}
|
||||
end
|
||||
|
||||
|
||||
local function get_v(v)
|
||||
return sqrt(v.x * v.x + v.z * v.z)
|
||||
end
|
||||
|
||||
|
||||
local function force_detach(player)
|
||||
|
||||
local attached_to = player and player:get_attach()
|
||||
|
||||
if not attached_to then return end
|
||||
|
||||
local entity = attached_to:get_luaentity()
|
||||
|
||||
if entity and entity.driver and entity.driver == player then
|
||||
entity.driver = nil
|
||||
end
|
||||
|
||||
player:set_detach()
|
||||
|
||||
local name = player:get_player_name()
|
||||
|
||||
if is_mc2 then
|
||||
mcl_player.player_attached[player:get_player_name()] = false
|
||||
mcl_player.player_set_animation(player, "stand", 30)
|
||||
else
|
||||
player_api.player_attached[name] = false
|
||||
player_api.set_animation(player, "stand", 30)
|
||||
end
|
||||
|
||||
player:set_eye_offset({x = 0, y = 0, z = 0}, {x = 0, y = 0, z = 0})
|
||||
player:set_properties({visual_size = {x = 1, y = 1}})
|
||||
end
|
||||
|
||||
-- detach player on leaving
|
||||
|
||||
core.register_on_leaveplayer(function(player)
|
||||
force_detach(player)
|
||||
end)
|
||||
|
||||
-- detatch all players on shutdown
|
||||
|
||||
core.register_on_shutdown(function()
|
||||
|
||||
local players = core.get_connected_players()
|
||||
|
||||
for i = 1, #players do
|
||||
force_detach(players[i])
|
||||
end
|
||||
end)
|
||||
|
||||
-- detatch player when dead
|
||||
|
||||
core.register_on_dieplayer(function(player)
|
||||
force_detach(player)
|
||||
return true
|
||||
end)
|
||||
|
||||
-- find free position to detach player
|
||||
|
||||
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 = core.get_node_or_nil(npos)
|
||||
|
||||
if node and node.name then
|
||||
|
||||
local def = core.registered_nodes[node.name]
|
||||
|
||||
if def and not def.walkable and def.liquidtype == "none" then
|
||||
return npos
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return pos
|
||||
end
|
||||
|
||||
-- are we a real player ?
|
||||
|
||||
local function is_player(player)
|
||||
|
||||
if player and type(player) == "userdata" and core.is_player(player) then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
-- attach player to mob entity
|
||||
|
||||
function mobs.attach(entity, player)
|
||||
|
||||
if not player then return end
|
||||
|
||||
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 = pi / 2 end
|
||||
|
||||
local attach_at = entity.driver_attach_at
|
||||
local eye_offset = entity.driver_eye_offset
|
||||
|
||||
entity.driver = player
|
||||
|
||||
force_detach(player)
|
||||
|
||||
if is_mc2 then
|
||||
mcl_player.player_attached[player:get_player_name()] = true
|
||||
else
|
||||
player_api.player_attached[player:get_player_name()] = true
|
||||
end
|
||||
|
||||
player:set_attach(entity.object, "", attach_at, entity.player_rotation)
|
||||
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}
|
||||
})
|
||||
|
||||
core.after(0.2, function()
|
||||
|
||||
if is_player(player) then
|
||||
|
||||
if is_mc2 then
|
||||
mcl_player.player_set_animation(player, "sit_mount" , 30)
|
||||
else
|
||||
player_api.set_animation(player, "sit", 30)
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
player:set_look_horizontal(entity.object:get_yaw() - rot_view)
|
||||
end
|
||||
|
||||
-- detatch player from mob
|
||||
|
||||
function mobs.detach(player)
|
||||
|
||||
force_detach(player)
|
||||
|
||||
core.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
|
||||
|
||||
-- vars
|
||||
|
||||
local damage_counter = 0
|
||||
|
||||
-- ride mob like car or horse
|
||||
|
||||
function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime)
|
||||
|
||||
local yaw = entity.object:get_yaw() or 0
|
||||
local rot_view = 0
|
||||
|
||||
if entity.player_rotation.y == 90 then rot_view = pi / 2 end
|
||||
|
||||
local acce_y = 0
|
||||
local velo = entity.object:get_velocity() ; if not velo then return end
|
||||
|
||||
entity.v = get_v(velo) * get_sign(entity.v)
|
||||
|
||||
-- process controls
|
||||
if entity.driver then
|
||||
|
||||
local ctrl = entity.driver:get_player_control()
|
||||
|
||||
if ctrl.up then -- move forwards
|
||||
|
||||
entity.v = entity.v + entity.accel * dtime
|
||||
|
||||
elseif ctrl.down then -- move backwards
|
||||
|
||||
if entity.max_speed_reverse == 0 and entity.v == 0 then return end
|
||||
|
||||
entity.v = entity.v - entity.accel * dtime
|
||||
end
|
||||
|
||||
-- mob rotation
|
||||
local horz
|
||||
|
||||
if entity.alt_turn == true then
|
||||
|
||||
horz = yaw
|
||||
|
||||
if ctrl.left then horz = horz + 0.05
|
||||
elseif ctrl.right then horz = horz - 0.05 end
|
||||
else
|
||||
horz = entity.driver:get_look_horizontal() or 0
|
||||
end
|
||||
|
||||
entity.object:set_yaw(horz - entity.rotate)
|
||||
|
||||
if can_fly then
|
||||
|
||||
if ctrl.jump then -- fly up
|
||||
|
||||
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 - dtime
|
||||
|
||||
if velo.y < 0 then velo.y = 0 end
|
||||
end
|
||||
|
||||
if ctrl.sneak then -- fly down
|
||||
|
||||
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 + dtime
|
||||
|
||||
if velo.y > 0 then velo.y = 0 end
|
||||
end
|
||||
else
|
||||
if ctrl.jump then -- jump (only when standing on solid surface)
|
||||
|
||||
if velo.y == 0
|
||||
and entity.standing_on ~= "air" and entity.standing_on ~= "ignore"
|
||||
and core.get_item_group(entity.standing_on, "liquid") == 0 then
|
||||
velo.y = velo.y + entity.jump_height
|
||||
acce_y = acce_y + (acce_y * 3) + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local ni = node_is(entity)
|
||||
|
||||
-- env damage
|
||||
if ni == "liquid" or ni == "lava" then
|
||||
|
||||
damage_counter = damage_counter + dtime
|
||||
|
||||
if damage_counter > 1 then
|
||||
|
||||
local damage = 0
|
||||
|
||||
if entity.lava_damage > 0 and ni == "lava" then
|
||||
damage = entity.lava_damage
|
||||
elseif entity.water_damage > 0 and ni == "liquid" then
|
||||
damage = entity.water_damage
|
||||
end
|
||||
|
||||
if damage >= 1 then
|
||||
|
||||
entity.object:punch(entity.object, 1.0, {
|
||||
full_punch_interval = 1.0,
|
||||
damage_groups = {fleshy = damage}
|
||||
}, nil)
|
||||
end
|
||||
|
||||
damage_counter = 0
|
||||
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 entity:set_animation(stand_anim) end
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
-- set moving animation
|
||||
if moving_anim then entity:set_animation(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
|
||||
if entity.v > entity.max_speed_forward then
|
||||
entity.v = entity.max_speed_forward
|
||||
elseif entity.v < -entity.max_speed_reverse then
|
||||
entity.v = -entity.max_speed_reverse
|
||||
end
|
||||
|
||||
-- Set position, velocity and acceleration
|
||||
local p = entity.object:get_pos()
|
||||
|
||||
if not p then return end
|
||||
|
||||
local new_acce = {x = 0, y = entity.fall_speed, z = 0}
|
||||
|
||||
p.y = p.y - 0.5
|
||||
|
||||
local v = entity.v
|
||||
|
||||
if ni == "air" then
|
||||
|
||||
if can_fly then new_acce.y = 0 ; acce_y = 0 end
|
||||
|
||||
elseif ni == "liquid" or ni == "lava" 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 core.get_item_group(entity.standing_in, "liquid") ~= 0 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 abs(velo.y) < 1 then
|
||||
|
||||
local pos = entity.object:get_pos()
|
||||
|
||||
if not pos then return end
|
||||
|
||||
pos.y = floor(pos.y) + 0.5
|
||||
entity.object:set_pos(pos)
|
||||
velo.y = 0
|
||||
end
|
||||
end
|
||||
else
|
||||
v = v * 0.25
|
||||
end
|
||||
end
|
||||
|
||||
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)
|
||||
|
||||
entity.v2 = v
|
||||
end
|
||||
|
||||
-- fly mob in facing direction (by D00Med, edited by TenPlus1)
|
||||
|
||||
function mobs.fly(entity, _, speed, shoots, arrow, moving_anim, stand_anim)
|
||||
|
||||
local ctrl = entity.driver:get_player_control() ; if not ctrl then return end
|
||||
local velo = entity.object:get_velocity() ; if not velo then return end
|
||||
local dir = entity.driver:get_look_dir()
|
||||
local yaw = entity.driver:get_look_horizontal() ; if not yaw then return end
|
||||
|
||||
yaw = yaw + 1.57 -- fix from get_yaw to get_look_horizontal
|
||||
|
||||
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 + pi + pi / 2 - entity.rotate)
|
||||
|
||||
-- firing arrows
|
||||
if ctrl.LMB and ctrl.sneak and shoots then
|
||||
|
||||
local pos = entity.object:get_pos()
|
||||
local obj = core.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 mob
|
||||
|
||||
local vec = {x = dir.x * 6, y = dir.y * 6, z = dir.z * 6}
|
||||
|
||||
yaw = entity.driver:get_look_horizontal()
|
||||
|
||||
obj:set_yaw(yaw + pi / 2)
|
||||
obj:set_velocity(vec)
|
||||
else
|
||||
obj:remove()
|
||||
end
|
||||
end
|
||||
|
||||
if velo.x == 0 and velo.y == 0 and velo.z == 0 then
|
||||
entity:set_animation(stand_anim) -- stopped animation
|
||||
else
|
||||
entity:set_animation(moving_anim) -- moving animation
|
||||
end
|
||||
end
|
445
mods/mobs/readme.MD
Normal file
|
@ -0,0 +1,445 @@
|
|||
# MOBS REDO for MINETEST
|
||||
|
||||
Built from PilzAdam's original Simple Mobs with additional mobs by KrupnoPavel,
|
||||
Zeg9, ExeterDad and AspireMint.
|
||||
|
||||
This mod contains the API only for adding your own mobs into the world, so
|
||||
please use the additional modpacks to add animals, monsters, and npcs.
|
||||
|
||||
https://forum.minetest.net/viewtopic.php?f=11&t=9917
|
||||
|
||||
## Crafts
|
||||
|
||||
- **Nametag**. Can be crafted by paper, black dye, and string. Can be used
|
||||
to right-click on a tamed mob to give them a name.
|
||||
- **Net**. Used to right-click tamed mobs to pick them up and place inside
|
||||
inventory as a spawn egg.
|
||||
- **Magic lasso**. Similar to nets but with a better chance of picking up
|
||||
larger mobs.
|
||||
- **Shears**. Used to right-click sheep and return 1-3 wool.
|
||||
- **Protection Rune**. Protects tamed mobs from being harmed by other players.
|
||||
- **Mob Fence and Fence Top**. Stops mobs escaping or glitching throughfences.
|
||||
- Add mobs:mob_repellent block to stop mobs spawning within 16 node radius.
|
||||
|
||||
**Lucky Blocks**: 13
|
||||
|
||||
## Changelog
|
||||
|
||||
### Version 1.62
|
||||
|
||||
* Added ability for mobs to hear using self.on_sound() function
|
||||
* Added 'mobs_can_hear' setting to turn above feature on/off
|
||||
* Added {eatable} group to food items and HP in description
|
||||
* Fixed timer bug when attacking
|
||||
* Fixed fall damage check when riding mob
|
||||
* Calculate damage before do_punch function called
|
||||
* Add function to check for dropped items and for mob to do something with them
|
||||
|
||||
### Version 1.61
|
||||
|
||||
* Fixed mob damage when riding mobs
|
||||
* Added entity:is_inside(itemtable) function (thx cora)
|
||||
* Added self.attack_patience value so mobs stop attacking unseen players
|
||||
* Added self.homing so that arrows follow player when visible
|
||||
* Added support for Visual Harm 1ndicators mod to show health bars
|
||||
* Added self.node_damage flag which is true by default to enable damage_per_second node damage
|
||||
* Added check for on_death() function before using mob api's own on_die() one
|
||||
* Added mobs:fallback_node for when current [game] hasn't defined mapgen_dirt node
|
||||
|
||||
### Version 1.60
|
||||
|
||||
* Move mob and arrow entities to use initial_properties
|
||||
* Spawn eggs check if mob is available when creating
|
||||
* Used get/set_properties() within API for mob properties
|
||||
* Moved nametag variable to self._nametag
|
||||
* Tidied breeding function
|
||||
* Better MineClone2 / MineClonia support added
|
||||
* Tweaked and tidied code in places
|
||||
|
||||
### Version 1.57
|
||||
|
||||
* Added 'injured' animation when mob hurt
|
||||
* Fixed yaw clamping to stop spinning mobs
|
||||
* Added 'mob_node_timer_interval' and 'mob_main_timer_interval' settings
|
||||
* Added ability for mobs to die only in natural daylight
|
||||
* Refactored do_jump and added get_nodes function
|
||||
* Many bug fixes and tweaks to improve performance
|
||||
* Added 'mobs_attack_creatura' setting so that monsters can attack Creatura mobs
|
||||
* Nodes can be added to 'runaway_from' table
|
||||
* Better Mineclone2 compatibility with api, items and recipes
|
||||
* Added 'mob_log_spawn' setting to log spawning of mobs and position
|
||||
|
||||
### Version 1.56
|
||||
|
||||
* Added `arrow_override` function to mob definition to tweak arrow entity settings
|
||||
* Added injured animation and mob hit effect
|
||||
* Tamed monsters no longer despawn when outside loaded map area
|
||||
* `looting_level` can be read from tool definition or tool meta to add extra
|
||||
drops when mob killed
|
||||
|
||||
### Version 1.55
|
||||
|
||||
* Added `peaceful_player` privilege and setting so mobs don't attack specific
|
||||
players (thanks sfence)
|
||||
* Added support for MarkBu's `pathfinder` mod, remove need for default mod
|
||||
|
||||
### Version 1.54
|
||||
|
||||
* **New support for swimming mobs**
|
||||
- `on_flop` (for mobs not in water)
|
||||
- `air_damage` added
|
||||
* Added editable settings (thanks Wuzzy)
|
||||
* Simplified animal breeding function
|
||||
* Child mobs now take twenty minutes to grow up
|
||||
* Reverted to simple mob spawning with setting to use area checks
|
||||
|
||||
### Version 1.53
|
||||
|
||||
* Added `on_map_load` settings to `mobs:spawn` so that mobs will only spawn
|
||||
when new areas of map are loaded.
|
||||
|
||||
### Version 1.52
|
||||
|
||||
* Added `mob_active_limit` in settings to set number of mobs in game. The
|
||||
default is 0, for unlimited mobs.
|
||||
* Removed `{immortal}` from mob armor
|
||||
* Fluid viscocity slows mobs (for example, water)
|
||||
|
||||
### Version 1.51
|
||||
|
||||
* Added node checks for dangerous nodes
|
||||
* Add `mob_nospawn_range` setting
|
||||
* Jumping and falling tweaks
|
||||
* Spawn area check (thanks for idea wuzzy)
|
||||
* Re-enabled mob suffocation
|
||||
|
||||
### Version 1.50
|
||||
|
||||
* Added new `line_of_sight` function that uses raycasting if Minetest 5.0 is
|
||||
found, (thanks Astrobe)
|
||||
* Added Chinese local
|
||||
* Removed ability to spawn mobs if world anchor nearby (`technic` or
|
||||
`simple_anchor` mods)
|
||||
|
||||
### Version 1.49
|
||||
|
||||
* Added `mobs:force_capture(self, player)` function
|
||||
* API functions now use metatables thanks to bell07
|
||||
|
||||
### Version 1.48
|
||||
|
||||
* Added `mobs:set_velocity(self, velocity)` global function [deprecated]
|
||||
|
||||
### Version 1.47
|
||||
|
||||
* Added minimum and maximum light level for damage
|
||||
* Mob damage changes
|
||||
* Ignition sources checked for lava damage
|
||||
|
||||
### Version 1.46
|
||||
|
||||
* Mobs only drop rare items when killed by player. You can make change the
|
||||
drops to rare items by using `drops.min = 0`
|
||||
* Pathfinding no longer sees through walkable nodes
|
||||
|
||||
### Version 1.45
|
||||
|
||||
* Added fence top to add on top of any fence to stop mobs escaping
|
||||
* New `line_of_sight` tweaked by `Astrobe`
|
||||
|
||||
### Version 1.44
|
||||
|
||||
* Added `ToolRanks` support for swords when attacking mobs
|
||||
|
||||
### Version 1.43
|
||||
|
||||
* Added general attack function and settings
|
||||
* Better Minetest 0.4.16 compatibility
|
||||
|
||||
### Version 1.42
|
||||
|
||||
* Added `"all"` option to `immune_to` definition table
|
||||
* Tidied floating mobs to be less intensive
|
||||
|
||||
### Version 1.41
|
||||
|
||||
* Mob pathfinding has been updated thanks to `Elkien3`
|
||||
|
||||
### Version 1.40
|
||||
|
||||
* Updated to use newer functions, requires Minetest 0.4.16+ to work
|
||||
|
||||
### Version 1.39
|
||||
|
||||
* **New custom functions**:
|
||||
- `on_breed` (called when mobs have just been bred)
|
||||
- `on_grown` (called when baby mobs have grown up)
|
||||
- `do_punch` (called when the mob has been punched or damaged by another mob)
|
||||
|
||||
### Version 1.38
|
||||
|
||||
* Better entity checking
|
||||
* Nametag setting
|
||||
* `on_spawn` function added to mob registry
|
||||
* Tweaked light damage
|
||||
|
||||
### Version 1.37
|
||||
|
||||
* Added support for `Raymoo`'s CMI (common mob interface) mod. See
|
||||
https://forum.minetest.net/viewtopic.php?f=9&t=15448 for details
|
||||
|
||||
### Version 1.36
|
||||
|
||||
* Added death check. If the mob dies in fire/lava/with lava pick, then drops
|
||||
are cooked
|
||||
|
||||
### Version 1.35
|
||||
|
||||
* Added `owner_loyal` flag for owned mobs to attack player enemies
|
||||
* Fixed `group_attack`
|
||||
|
||||
### Version 1.34
|
||||
|
||||
* Added function to fly mob using directional movement (thanks D00Med for
|
||||
flying code)
|
||||
|
||||
### Version 1.33
|
||||
|
||||
* Added functions to mount ride mobs:
|
||||
- `mobs.attach`
|
||||
- `mobs.detach`
|
||||
- `mobs.drive`. Many thanks to `Blert2112`
|
||||
|
||||
### Version 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
|
||||
|
||||
### Version 1.31
|
||||
|
||||
* Added `attack_animals` and `specific_attack` flags for custom monster
|
||||
attacks
|
||||
* Added 'mob_difficulty' .conf setting to make mobs harder
|
||||
|
||||
### Version 1.30
|
||||
|
||||
* Added support for `invisibility` mod
|
||||
* Tweaked and tidied code
|
||||
|
||||
### Version 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
|
||||
|
||||
### Version 1.28
|
||||
|
||||
* Added new damage system with ability for mob to be immune to weapons or
|
||||
healed by them :)
|
||||
|
||||
### Version 1.27
|
||||
|
||||
* Added new sheep, lava flan and spawn egg textures
|
||||
* New Lava Pick tool smelts what you dig
|
||||
* New `atan` checking function
|
||||
|
||||
### Version 1.26
|
||||
|
||||
* Pathfinding feature added thanks to rnd
|
||||
* When monsters attack they become scary smart in finding you :)
|
||||
* Beehive produces honey now :)
|
||||
|
||||
### Version 1.25
|
||||
|
||||
* Mobs no longer spawn within 12 blocks of player or despawn within same
|
||||
range
|
||||
* Spawners now have player detection
|
||||
* Tidy and tweak code
|
||||
|
||||
### Version 1.24
|
||||
|
||||
* Added feature where certain animals run away when punched
|
||||
(`runaway = true` in mob definition)
|
||||
|
||||
### Version 1.23
|
||||
|
||||
* Added mob spawner block for admin to setup spawners in-game (place and
|
||||
right-click to enter settings)
|
||||
|
||||
### Version 1.22
|
||||
|
||||
* Added ability to name tamed animals and NPCs using nametags
|
||||
* NPCs will attack anyone who punches them apart from owner
|
||||
|
||||
### Version 1.21
|
||||
|
||||
* Added some more error checking to reduce `serialize.h` error and added height
|
||||
checks for falling off cliffs (thanks `cmdskp`)
|
||||
|
||||
### Version 1.20
|
||||
|
||||
* Error checking added to remove bad mobs
|
||||
* Out of map limit mobs and stop `serialize.h` error
|
||||
|
||||
### Version 1.19
|
||||
|
||||
* Chickens now drop egg items instead of placing the egg
|
||||
* Throwing eggs result in ⅛ chance of spawning chick
|
||||
|
||||
### Version 1.18
|
||||
|
||||
* Added `docile_by_day` flag so that monsters will not attack automatically
|
||||
during daylight hours unless hit first
|
||||
|
||||
### Version 1.17
|
||||
|
||||
* Added `dogshoot` attack type. Mobs now shoot when out of reach
|
||||
* Melee attack when in reach, also API tweaks and `self.reach` added
|
||||
|
||||
### Version 1.16
|
||||
|
||||
* Mobs follow multiple items now
|
||||
* NPCs can now breed
|
||||
|
||||
### Version 1.15
|
||||
|
||||
* Added feeding, taming, and breeding function
|
||||
* Right-click to pick up any sheep with X mark on them and replace with new one
|
||||
to fix compatibility.
|
||||
|
||||
### Version 1.14
|
||||
|
||||
* All variables saved in staticdata
|
||||
* Fixed health bug
|
||||
|
||||
### Version 1.13
|
||||
|
||||
* Added capture function (thanks `blert2112`) chance of picking up mob with a
|
||||
hand, a net, or a magic lasso
|
||||
* Replaced some `.x` models with newer `.b3d` ones
|
||||
|
||||
### Version 1.12
|
||||
|
||||
* Added animal ownership so that players cannot steal your tamed animals
|
||||
|
||||
### Version 1.11
|
||||
|
||||
* Added flying and swimming mobs
|
||||
* `fly=true` and `fly_in="air"` or `"default:water_source"` for fishy
|
||||
|
||||
### Version 1.10
|
||||
|
||||
* Added explosion routine for exploding mob
|
||||
* Footstep removed (use replace)
|
||||
|
||||
### Version 1.09
|
||||
|
||||
|
||||
* Added mob rotation value
|
||||
* Added footstep feature
|
||||
* Added jumping mobs with sounds feature
|
||||
* Aadded magic lasso for picking up animals
|
||||
* Reworked breeding routine
|
||||
|
||||
### Version 1.08
|
||||
|
||||
* Added drops that appear when mob is killed
|
||||
* New custom function: `on_die` function
|
||||
* Mob throwing attack has been rehauled so that they can damage one another,
|
||||
|
||||
### Version 1.07
|
||||
|
||||
* NPCs can now be set to follow player or stand by using `order` and `owner`
|
||||
variables
|
||||
|
||||
* BETA: Npc mob added. They kill monsters (maybe as guards) and attack players
|
||||
when punched by them. Right-clicking them with food will heal them, and
|
||||
giving them gold lump will make them drop a random item.
|
||||
|
||||
### Version 1.06
|
||||
|
||||
* Changed recovery times after breeding. Time taken to grow up can be sped up
|
||||
by feeding the baby animal.
|
||||
|
||||
### Version 1.05
|
||||
|
||||
* Added `ExeterDad`'s bunniess which can be picked up and tamed with four carrots from `farming_redo` or `farming_plus`
|
||||
* Added shears to get wool from sheep
|
||||
* Added Jordach/BSD's kitten
|
||||
|
||||
### Version 1.04
|
||||
|
||||
* Added mating for sheep, cows and hogs
|
||||
* Added feature to feed animals to make horny and hope for a baby which is half
|
||||
size, they will grow up quick though :)
|
||||
|
||||
### Version 1.03
|
||||
|
||||
* Added mob drop/replace feature so that chickens can drop eggs and cow/sheep
|
||||
can eat grass/wheat etc.
|
||||
|
||||
### Version 1.02
|
||||
|
||||
* Sheared sheep are remembered and spawn shaven
|
||||
* Warthogs will attack when threatened
|
||||
* API additions
|
||||
|
||||
### Version 1.01
|
||||
|
||||
* Mobs that suffer fall damage or die in water/lava/sunlight will now drop
|
||||
items
|
||||
|
||||
### Version 1.0
|
||||
|
||||
* More work on API so that certain mobs can float in water while some sink like
|
||||
a brick :)
|
||||
|
||||
### Version 0.9
|
||||
|
||||
* Spawn eggs added for all mobs (admin only, cannot be placed in protected
|
||||
areas)
|
||||
* Tweaked API
|
||||
|
||||
### Version 0.8
|
||||
|
||||
* Added sounds to monster mobs (thanks `Cyberpangolin` for the `sfx`)
|
||||
* Added chicken sound
|
||||
### Version 0.7
|
||||
|
||||
* `mobs.protected` switch added to `api.lua`. When set to 1 mobs no longer
|
||||
spawn in protected areas
|
||||
* Minor bugfixes
|
||||
|
||||
### Version 0.6
|
||||
|
||||
* API now supports multi-textured mobs, e.g oerkki, dungeon master, rats and
|
||||
chickens have random skins when spawning (sheep fix TODO)
|
||||
* Added new Honey block
|
||||
|
||||
### Version 0.5
|
||||
|
||||
* Mobs now float in water, die from falling
|
||||
* Minor code improvements
|
||||
|
||||
### Version 0.4
|
||||
|
||||
* Added new sheep sound :)
|
||||
* Dungeon Masters and Mese Monsters have much better aim due to `shoot_offset`
|
||||
* They can both shoot through nodes that aren't walkable (flowers, grass, etc.)
|
||||
|
||||
### Version 0.3
|
||||
|
||||
* Added `LOTT`'s Spider mob
|
||||
* Added Cobwebs
|
||||
* Added KPavel's Bee with Honey and Beehives (made texture)
|
||||
* Warthogs now have sound and can be tamed
|
||||
* Taming of shaved sheep or milked cow with 8 wheat so it will not despawn
|
||||
* Multiple bug fixes :)
|
||||
|
||||
### Version 0.2
|
||||
|
||||
* Cooking bucket of milk into cheese now returns empty bucket
|
||||
|
||||
### Version 0.1
|
||||
|
||||
* Initial Release
|
93
mods/mobs/settingtypes.txt
Normal file
|
@ -0,0 +1,93 @@
|
|||
# Enable setting so that Mobs Redo mobs can attack Creatura mobs
|
||||
mobs_attack_creatura (Attack Creatura Mobs) bool false
|
||||
|
||||
# How often mobs get nodes around them (default is 0.25, 1/4 second)
|
||||
mob_node_timer_interval (Mob Node Timer Interval) float 0.25
|
||||
|
||||
# How often mobs run main functions (default is 1.00, 1 second)
|
||||
mob_main_timer_interval (Mob Node Timer Interval) float 1.00
|
||||
|
||||
# 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 enabled the mobs will be highlighted when hit
|
||||
mob_hit_effect (Highlight Mob when Hit) 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 false then Monsters no longer spawn inside player protected areas
|
||||
mobs_spawn_monster_protected (Spawn Monsters in protected areas) bool true
|
||||
|
||||
# If true Mobs will be removed once a map chunk is out of view
|
||||
remove_far_mobs (Remove far Mobs) bool true
|
||||
|
||||
# Sets Mob difficulty level by multiplying punch damage
|
||||
mob_difficulty (Mob difficulty) float 1.0
|
||||
|
||||
# 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
|
||||
|
||||
# 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
|
||||
|
||||
# Enable mobs smooth rotation
|
||||
mob_smooth_rotate (Smooth rotation for mobs) bool true
|
||||
|
||||
# Fix Mob Height if too low so they cannot escape through specific nodes
|
||||
mob_height_fix (Fix Mob Height) bool false
|
||||
|
||||
mob_log_spawn (Log Mob Spawning) bool false
|
||||
|
||||
# Mob hearing, when enabled will override minetest.sound_play for mobs to hear
|
||||
mobs_can_hear (Enable Mob hearing) bool true
|
||||
|
||||
# Node hearing, when enabled will allow nodes to hear nearby sounds
|
||||
mobs_can_hear_node (Enable Node hearing) bool false
|
||||
|
||||
# By default mobs are dealt knockback from damage, this lets you disable it
|
||||
mobs_disable_damage_kb (Disable knockback from damage only) bool false
|
||||
|
||||
[Pathfinding]
|
||||
# Enable pathfinding (default Enabled)
|
||||
mob_pathfinding_enable (Enable pathfinding) bool true
|
||||
# How long before stuck mobs starts searching (default 3.0)
|
||||
mob_pathfinding_stuck_timeout (How long before stuck mobs start searching) float 3.0
|
||||
# How long will mob follow path before giving up (default 5.0)
|
||||
mob_pathfinding_stuck_path_timeout (How long will mob follow path before giving up) float 5.0
|
||||
# Which pathfinding algorithm to use
|
||||
# - Dijkstra (default)
|
||||
# - A*_noprefetch (AStar_noprefetch)
|
||||
# - A* (AStar)
|
||||
# (A* names differ cause Minetest doesn´t allow "*" in settings)
|
||||
mob_pathfinding_algorithm (pathfinding algorithm) enum Dijkstra Dijkstra,AStar_noprefetch,AStar
|
||||
# max search distance from search positions (default 16)
|
||||
mob_pathfinding_searchdistance (path search distance) int 16
|
||||
# max jump height for pathfinding (default 4)
|
||||
mob_pathfinding_max_jump (path max jump height) int 4
|
||||
# max drop height for pathfinding (default 6)
|
||||
mob_pathfinding_max_drop (path max drop height) int 6
|
||||
|
||||
# Enable mob infotext on hover
|
||||
mob_infotext (Enable mob infotext on hover) bool true
|
BIN
mods/mobs/sounds/mobs_punch.ogg
Normal file
BIN
mods/mobs/sounds/mobs_spell.ogg
Normal file
BIN
mods/mobs/sounds/mobs_swing.ogg
Normal file
197
mods/mobs/spawner.lua
Normal file
|
@ -0,0 +1,197 @@
|
|||
|
||||
local S = core.get_translator("mobs")
|
||||
local max_per_block = tonumber(core.settings:get("max_objects_per_block") or 99)
|
||||
|
||||
-- helper functions
|
||||
|
||||
local function is_player(player)
|
||||
|
||||
if player and type(player) == "userdata" and core.is_player(player) then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
local square = math.sqrt
|
||||
|
||||
local get_distance = function(a, b)
|
||||
|
||||
if not a or not b then return 50 end -- nil check and default distance
|
||||
|
||||
local x, y, z = a.x - b.x, a.y - b.y, a.z - b.z
|
||||
|
||||
return square(x * x + y * y + z * z)
|
||||
end
|
||||
|
||||
-- mob spawner
|
||||
|
||||
local spawner_default = "mobs_animal:pumba 10 15 0 0 0"
|
||||
|
||||
core.register_node("mobs:spawner", {
|
||||
tiles = {"mob_spawner.png"},
|
||||
drawtype = "glasslike",
|
||||
paramtype = "light",
|
||||
walkable = true,
|
||||
description = S("Mob Spawner"),
|
||||
groups = {cracky = 1, pickaxey = 3},
|
||||
is_ground_content = false,
|
||||
_mcl_hardness = 1,
|
||||
_mcl_blast_resistance = 5,
|
||||
sounds = mobs.node_sound_stone_defaults(),
|
||||
|
||||
on_construct = function(pos)
|
||||
|
||||
local meta = core.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", "size[10,3.5]"
|
||||
.. "label[0.15,0.5;" .. core.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,
|
||||
|
||||
on_right_click = function(pos, placer)
|
||||
|
||||
if core.is_protected(pos, placer:get_player_name()) then return end
|
||||
end,
|
||||
|
||||
on_receive_fields = function(pos, formname, fields, sender)
|
||||
|
||||
if not fields.text or fields.text == "" then return end
|
||||
|
||||
local meta = core.get_meta(pos)
|
||||
local comm = fields.text:split(" ")
|
||||
local name = sender:get_player_name()
|
||||
|
||||
if core.is_protected(pos, name) then
|
||||
core.record_protection_violation(pos, name)
|
||||
return
|
||||
end
|
||||
|
||||
local mob = comm[1] or "" -- mob to spawn
|
||||
local mlig = tonumber(comm[2]) -- min light
|
||||
local xlig = tonumber(comm[3]) -- max light
|
||||
local num = tonumber(comm[4]) -- total mobs in area
|
||||
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 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 yof and yof > -10 and yof < 10 then
|
||||
|
||||
meta:set_string("command", fields.text)
|
||||
meta:set_string("infotext", S("Spawner Active (@1)", mob))
|
||||
else
|
||||
core.chat_send_player(name, S("Mob Spawner settings failed!"))
|
||||
core.chat_send_player(name,
|
||||
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
|
||||
})
|
||||
|
||||
-- spawner abm
|
||||
|
||||
core.register_abm({
|
||||
label = "Mob spawner node",
|
||||
nodenames = {"mobs:spawner"},
|
||||
interval = 10,
|
||||
chance = 4,
|
||||
catch_up = false,
|
||||
|
||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||
|
||||
-- return if too many entities already
|
||||
if active_object_count_wider >= max_per_block then return end
|
||||
|
||||
-- get meta and command
|
||||
local meta = core.get_meta(pos)
|
||||
local comm = meta:get_string("command"):split(" ")
|
||||
|
||||
-- get settings from command
|
||||
local mob = comm[1]
|
||||
local mlig = tonumber(comm[2])
|
||||
local xlig = tonumber(comm[3])
|
||||
local num = tonumber(comm[4])
|
||||
local pla = tonumber(comm[5]) or 0
|
||||
local yof = tonumber(comm[6]) or 0
|
||||
|
||||
-- if amount is 0 then do nothing
|
||||
if num == 0 then return 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 = core.get_objects_inside_radius(pos, 9)
|
||||
local count = 0
|
||||
local ent
|
||||
|
||||
-- count mob objects of same type in area
|
||||
for _, obj in ipairs(objs) do
|
||||
|
||||
ent = obj:get_luaentity()
|
||||
|
||||
if ent and ent.name and ent.name == mob then count = count + 1 end
|
||||
end
|
||||
|
||||
-- is there too many of same type?
|
||||
if count >= num then return end
|
||||
|
||||
-- when player distance above 0, spawn mob if player detected and in range
|
||||
if pla > 0 then
|
||||
|
||||
local in_range, player
|
||||
local players = core.get_connected_players()
|
||||
|
||||
for i = 1, #players do
|
||||
|
||||
player = players[i]
|
||||
|
||||
if get_distance(player:get_pos(), pos) <= pla then
|
||||
|
||||
in_range = true
|
||||
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
-- player not found
|
||||
if not in_range then return end
|
||||
end
|
||||
|
||||
-- set medium mob usually spawns in (defaults to air)
|
||||
local reg = core.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 = core.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}, reg)
|
||||
|
||||
-- spawn in random air block
|
||||
if air and #air > 0 then
|
||||
|
||||
local pos2 = air[math.random(#air)]
|
||||
local lig = core.get_node_light(pos2) or 0
|
||||
|
||||
pos2.y = pos2.y + 0.5
|
||||
|
||||
-- only if light levels are within range
|
||||
if lig >= mlig and lig <= xlig and core.registered_entities[mob] then
|
||||
core.add_entity(pos2, mob)
|
||||
end
|
||||
end
|
||||
end
|
||||
})
|
BIN
mods/mobs/textures/mob_spawner.png
Normal file
After Width: | Height: | Size: 108 B |
BIN
mods/mobs/textures/mobs_blood.png
Normal file
After Width: | Height: | Size: 267 B |
BIN
mods/mobs/textures/mobs_bubble_particle.png
Normal file
After Width: | Height: | Size: 331 B |
BIN
mods/mobs/textures/mobs_chicken_egg.png
Normal file
After Width: | Height: | Size: 235 B |
BIN
mods/mobs/textures/mobs_chicken_egg_overlay.png
Normal file
After Width: | Height: | Size: 191 B |
BIN
mods/mobs/textures/mobs_fallback.png
Normal file
After Width: | Height: | Size: 821 B |
BIN
mods/mobs/textures/mobs_fire_particle.png
Normal file
After Width: | Height: | Size: 343 B |
BIN
mods/mobs/textures/mobs_hearing_vines.png
Normal file
After Width: | Height: | Size: 114 B |
BIN
mods/mobs/textures/mobs_hearing_vines_active.png
Normal file
After Width: | Height: | Size: 126 B |
BIN
mods/mobs/textures/mobs_heart_particle.png
Normal file
After Width: | Height: | Size: 279 B |
BIN
mods/mobs/textures/mobs_leather.png
Normal file
After Width: | Height: | Size: 196 B |
BIN
mods/mobs/textures/mobs_magic_lasso.png
Normal file
After Width: | Height: | Size: 176 B |
BIN
mods/mobs/textures/mobs_meat.png
Normal file
After Width: | Height: | Size: 411 B |
BIN
mods/mobs/textures/mobs_meat_bottom.png
Normal file
After Width: | Height: | Size: 734 B |
BIN
mods/mobs/textures/mobs_meat_raw.png
Normal file
After Width: | Height: | Size: 426 B |
BIN
mods/mobs/textures/mobs_meat_raw_bottom.png
Normal file
After Width: | Height: | Size: 796 B |
BIN
mods/mobs/textures/mobs_meat_raw_side.png
Normal file
After Width: | Height: | Size: 722 B |
BIN
mods/mobs/textures/mobs_meat_raw_top.png
Normal file
After Width: | Height: | Size: 800 B |
BIN
mods/mobs/textures/mobs_meat_side.png
Normal file
After Width: | Height: | Size: 693 B |
BIN
mods/mobs/textures/mobs_meat_top.png
Normal file
After Width: | Height: | Size: 748 B |
BIN
mods/mobs/textures/mobs_nametag.png
Normal file
After Width: | Height: | Size: 186 B |
BIN
mods/mobs/textures/mobs_net.png
Normal file
After Width: | Height: | Size: 195 B |
BIN
mods/mobs/textures/mobs_noentry_particle.png
Normal file
After Width: | Height: | Size: 165 B |
BIN
mods/mobs/textures/mobs_pint_sized_rune.png
Normal file
After Width: | Height: | Size: 160 B |
BIN
mods/mobs/textures/mobs_protect_particle.png
Normal file
After Width: | Height: | Size: 117 B |
BIN
mods/mobs/textures/mobs_protector.png
Normal file
After Width: | Height: | Size: 164 B |
BIN
mods/mobs/textures/mobs_protector2.png
Normal file
After Width: | Height: | Size: 164 B |
BIN
mods/mobs/textures/mobs_repellent.png
Normal file
After Width: | Height: | Size: 415 B |
BIN
mods/mobs/textures/mobs_saddle.png
Normal file
After Width: | Height: | Size: 166 B |
BIN
mods/mobs/textures/mobs_shears.png
Normal file
After Width: | Height: | Size: 224 B |
BIN
mods/mobs/textures/mobs_tnt_smoke.png
Normal file
After Width: | Height: | Size: 202 B |