Compare commits

...

3 Commits

Author SHA1 Message Date
39f94eb89b update readme with mobs api and mobs mods 2024-03-31 17:16:03 -04:00
2f7b36ea57 update mobs api to 20231105 version date, sync upstream
* Fixed mob damage when riding mobs
  err its better the xclusive player check, minetest api is shit
* Added self.attack_patience value so mobs stop attacking unseen players
* Added self.node_damage flag which is true by default to enable damage_per_second node damage
* Spawn eggs check if mob is available when creating
* fix autodetect ":" to beginning of entity registration for alias_mob
  commit a4cf246fce
  has an error, alias must be registered with `:MODNAME:obejectname`
  so if you dont add the prefix of `:` the default is the mod class parent, so
  swaping here the sustitution detection, for now..
  this addressed older https://notabug.org/TenPlus1/mobs_redo/issues/154
  fixed in good way, also commit b1ad4451a7
* harden spawn log message, better fix for nil checks
  reported, closes https://codeberg.org/tenplus1/mobs_redo#1
  referece at https://github.com/Archtec-io/bugtracker/issues/130
  this are not so good so implement in better way.
2024-03-31 17:03:54 -04:00
2427384422 deleted script that is not there 2024-03-31 17:03:41 -04:00
22 changed files with 574 additions and 472 deletions

View File

@ -31,6 +31,7 @@ To download you can play this game with the following minetest engines:
* https://codeberg.org/minenux/minetest-engine-minetest/src/branch/stable-4.1 * https://codeberg.org/minenux/minetest-engine-minetest/src/branch/stable-4.1
* https://codeberg.org/minenux/minetest-engine-minetest/src/branch/stable-4.0 * https://codeberg.org/minenux/minetest-engine-minetest/src/branch/stable-4.0
* https://codeberg.org/minenux/minetest-engine-minetest/src/branch/stable-5.X * https://codeberg.org/minenux/minetest-engine-minetest/src/branch/stable-5.X
* Final minetest from https://minetest.io/downloads/ or https://minetest.org
#### Mods #### Mods
@ -45,10 +46,13 @@ To download you can play this game with the following minetest engines:
* so then default flowers as `flowers` are need. Later this will need ethereal modifications. * so then default flowers as `flowers` are need. Later this will need ethereal modifications.
* minetest Random Spawn as `rspawn` [mods/rspawn](mods/rspawn) from https://codeberg.org/minenux/minetest-mod-rspawn * minetest Random Spawn as `rspawn` [mods/rspawn](mods/rspawn) from https://codeberg.org/minenux/minetest-mod-rspawn
* so then default beds as `beds` [mods/beds](mods/beds) from default 0.4 * so then default beds as `beds` [mods/beds](mods/beds) from default 0.4
* tenplus1 customized mods * tenplus1 petty mods but higly customized
* mobs_redo as `mobs` [mods/mobs](mods/mobs) from https://codeberg.org/minenux/minetest-mod-mobs_redo
* simple_skins as `skins` [mods/skins](mods/skins) from https://codeberg.org/minenux/minetest-mod-simple_skins * simple_skins as `skins` [mods/skins](mods/skins) from https://codeberg.org/minenux/minetest-mod-simple_skins
* regrow as `regrow` [mods/regrow](mods/regrow) from https://codeberg.org/minenux/minetest-mod-regrow * regrow as `regrow` [mods/regrow](mods/regrow) from https://codeberg.org/minenux/minetest-mod-regrow
* ethereal as `ethereal` [mods/ethereal](mods/ethereal) from https://codeberg.org/minenux/minetest-mod-ethereal * ethereal as `ethereal` [mods/ethereal](mods/ethereal) from https://codeberg.org/minenux/minetest-mod-ethereal
* PilzAdam mobs mods and D00Med mobs
* dmobs+animal+monsters as `mobs_jam` [mods/mobs_jam](mods/mobs_jam) from https://codeberg.org/minenux/minetest-mod-mobs_jam
* player stuffs: * player stuffs:
* minenux bags as `backpacks` [mods/backpacks](mods/backpacks) * minenux bags as `backpacks` [mods/backpacks](mods/backpacks)
* NPXcoot * NPXcoot

View File

@ -1,4 +1,4 @@
local MP = minetest.get_modpath(minetest.get_current_modname()) local MP = minetest.get_modpath("mobs")
-- Check for translation method -- Check for translation method
local S local S
@ -21,22 +21,29 @@ else
end end
end end
end end
local FS = function(...) return minetest.formspec_escape(S(...)) end
-- CMI support check -- CMI support check
local use_cmi = minetest.global_exists("cmi") local use_cmi = minetest.global_exists("cmi")
-- MineClone2 check
local use_mc2 = minetest.get_modpath("mcl_core")
-- Global
mobs = { mobs = {
mod = "redo", mod = "redo",
version = "20230805", version = "20231105",
intllib = S, translate = S, intllib = S,
invis = minetest.global_exists("invisibility") and invisibility or {}, invis = minetest.global_exists("invisibility") and invisibility or {},
node_ice = "default:ice", node_ice = "default:ice",
node_snow = minetest.registered_aliases["mapgen_snow"] or "default:snow" or "mcl_core:snow", node_snow = minetest.registered_aliases["mapgen_snow"]
node_dirt = minetest.registered_aliases["mapgen_dirt"] or "default:dirt" or "mcl_core:dirt" or (use_mc2 and "mcl_core:snow") or "default:snow",
node_dirt = minetest.registered_aliases["mapgen_dirt"]
or (use_mc2 and "mcl_core:dirt") or "default:dirt"
} }
mobs.fallback_node = mobs.node_dirt mobs.fallback_node = mobs.node_dirt
-- localize common functions -- localize common functions
local pi = math.pi local pi = math.pi
local square = math.sqrt local square = math.sqrt
@ -107,7 +114,8 @@ local pathfinder_enable = settings:get_bool("mob_pathfinder_enable") or true
local pathfinding_stuck_timeout = tonumber( local pathfinding_stuck_timeout = tonumber(
settings:get("mob_pathfinding_stuck_timeout")) or 3.0 settings:get("mob_pathfinding_stuck_timeout")) or 3.0
-- how long will mob follow path before giving up -- how long will mob follow path before giving up
local pathfinding_stuck_path_timeout = tonumber(settings:get("mob_pathfinding_stuck_path_timeout")) or 5.0 local pathfinding_stuck_path_timeout = tonumber(
settings:get("mob_pathfinding_stuck_path_timeout")) or 5.0
-- which algorithm to use, Dijkstra(default) or A*_noprefetch or A* -- which algorithm to use, Dijkstra(default) or A*_noprefetch or A*
-- fix settings not allowing "*" -- fix settings not allowing "*"
local pathfinding_algorithm = settings:get("mob_pathfinding_algorithm") or "Dijkstra" local pathfinding_algorithm = settings:get("mob_pathfinding_algorithm") or "Dijkstra"
@ -210,6 +218,7 @@ mobs.mob_class = {
friendly_fire = true, friendly_fire = true,
facing_fence = false, facing_fence = false,
_breed_countdown = nil, _breed_countdown = nil,
_tame_countdown = nil,
_cmi_is_mob = true _cmi_is_mob = true
} }
@ -220,21 +229,20 @@ local mob_class_meta = {__index = mob_class}
-- play sound -- play sound
function mob_class:mob_sound(sound) function mob_class:mob_sound(sound)
if sound then if not sound then return end
-- higher pitch for a child -- higher pitch for a child
local pitch = self.child and 1.5 or 1.0 local pitch = self.child and 1.5 or 1.0
-- a little random pitch to be different -- a little random pitch to be different
pitch = pitch + random(-10, 10) * 0.005 pitch = pitch + random(-10, 10) * 0.005
minetest.sound_play(sound, { minetest.sound_play(sound, {
object = self.object, object = self.object,
gain = 1.0, gain = 1.0,
max_hear_distance = self.sounds.distance, max_hear_distance = (self.sounds and self.sounds.distance) or 10,
pitch = pitch pitch = pitch
}, true) }, true)
end
end end
@ -825,6 +833,8 @@ function mob_class:update_tag()
text = "\nLoving: " .. (self.hornytimer - (HORNY_TIME + HORNY_AGAIN_TIME)) text = "\nLoving: " .. (self.hornytimer - (HORNY_TIME + HORNY_AGAIN_TIME))
elseif self.child == true then elseif self.child == true then
text = "\nGrowing: " .. (self.hornytimer - CHILD_GROW_TIME) text = "\nGrowing: " .. (self.hornytimer - CHILD_GROW_TIME)
elseif self._tame_countdown then
text = "\nTaming: " .. self._tame_countdown
elseif self._breed_countdown then elseif self._breed_countdown then
text = "\nBreeding: " .. self._breed_countdown text = "\nBreeding: " .. self._breed_countdown
end end
@ -1580,6 +1590,8 @@ function mob_class:breed()
-- make sure baby is actually there -- make sure baby is actually there
if ent2 then if ent2 then
textures = self.base_texture
-- using specific child texture (if found) -- using specific child texture (if found)
if self.child_texture then if self.child_texture then
textures = self.child_texture[1] textures = self.child_texture[1]
@ -1991,8 +2003,7 @@ local function is_peaceful_player(player)
local player_name = player:get_player_name() local player_name = player:get_player_name()
-- player priv enabled -- player priv enabled
if player_name if player_name and minetest.check_player_privs(player_name, "peaceful_player") then
and minetest.check_player_privs(player_name, "peaceful_player") then
return true return true
end end
end end
@ -2328,6 +2339,21 @@ function mob_class:dogswitch(dtime)
end end
-- stop attack
function mob_class:stop_attack()
self.attack = nil
self.following = nil
self.v_start = false
self.timer = 0
self.blinktimer = 0
self.path.way = nil
self:set_velocity(0)
self.state = "stand"
self:set_animation("stand", true)
end
-- execute current state (stand, walk, run, attacks) -- execute current state (stand, walk, run, attacks)
function mob_class:do_states(dtime) function mob_class:do_states(dtime)
@ -2478,6 +2504,11 @@ function mob_class:do_states(dtime)
self:set_velocity(0) self:set_velocity(0)
self.state = "stand" self.state = "stand"
self:set_animation("stand") self:set_animation("stand")
-- try to turn so we are not stuck
yaw = yaw + random(-1, 1) * 1.5
yaw = self:set_yaw(yaw, 4)
else else
self:set_velocity(self.run_velocity) self:set_velocity(self.run_velocity)
self:set_animation("walk") self:set_animation("walk")
@ -2501,19 +2532,28 @@ function mob_class:do_states(dtime)
--print(" ** stop attacking **", self.name, self.health, dist, self.view_range) --print(" ** stop attacking **", self.name, self.health, dist, self.view_range)
self.attack = nil self:stop_attack()
self.following = nil
self.v_start = false
self.timer = 0
self.blinktimer = 0
self.path.way = nil
self:set_velocity(0)
self.state = "stand"
self:set_animation("stand", true)
return return
end end
-- check enemy is in sight
local in_sight = self:line_of_sight(
{x = s.x, y = s.y + 0.5, z = s.z},
{x = p.x, y = p.y + 0.5, z = p.z})
-- stop attacking when enemy not seen for 11 seconds
if not in_sight then
self.target_time_lost = (self.target_time_lost or 0) + dtime
if self.target_time_lost > self.attack_patience then
self:stop_attack()
end
else
self.target_time_lost = 0
end
if self.attack_type == "explode" then if self.attack_type == "explode" then
yaw_to_pos(self, p) yaw_to_pos(self, p)
@ -2528,7 +2568,7 @@ function mob_class:do_states(dtime)
-- start timer when in reach and line of sight -- start timer when in reach and line of sight
if not self.v_start if not self.v_start
and dist <= self.reach and dist <= self.reach
and self:line_of_sight(s, p, 2) then and in_sight then
self.v_start = true self.v_start = true
self.timer = 0 self.timer = 0
@ -2540,7 +2580,7 @@ function mob_class:do_states(dtime)
-- stop timer if out of reach or direct line of sight -- stop timer if out of reach or direct line of sight
elseif self.allow_fuse_reset elseif self.allow_fuse_reset
and self.v_start and self.v_start
and (dist > self.reach or not self:line_of_sight(s, p, 2)) then and (dist > self.reach or not in_sight) then
--print("=== explosion timer stopped") --print("=== explosion timer stopped")
@ -2574,10 +2614,8 @@ function mob_class:do_states(dtime)
self.blinktimer = 0 self.blinktimer = 0
if self.blinkstatus then if self.blinkstatus then
self.object:set_texture_mod(self.texture_mods) self.object:set_texture_mod(self.texture_mods)
else else
self.object:set_texture_mod(self.texture_mods .. "^[brighten") self.object:set_texture_mod(self.texture_mods .. "^[brighten")
end end
@ -2590,10 +2628,9 @@ function mob_class:do_states(dtime)
local pos = self.object:get_pos() local pos = self.object:get_pos()
-- dont damage anything if area protected or next to waterpathfinding_max_jump -- dont damage anything if area protected or next to water
if minetest.find_node_near(pos, 1, {"group:water"}) if minetest.find_node_near(pos, 1, {"group:water"})
or minetest.is_protected(pos, "") then or minetest.is_protected(pos, "") then
node_break_radius = 1 node_break_radius = 1
end end
@ -3117,15 +3154,16 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir, damage)
self.following = nil self.following = nil
end end
local name = hitter:get_player_name() or "" local hitter_name = ""
if hitter then if is_player(hitter) then hitter_name = hitter:get_player_name() end end
-- attack puncher and call other mobs for help -- attack puncher and call other mobs for help
if self.passive == false if self.passive == false
and self.state ~= "flop" and self.state ~= "flop"
and self.child == false and self.child == false
and self.attack_players == true and self.attack_players == true
and hitter:get_player_name() ~= self.owner and not (is_player(hitter) and hitter_name == self.owner)
and not is_invisible(self, name) and not is_invisible(self, hitter_name)
and self.object ~= hitter then and self.object ~= hitter then
-- attack whoever punched mob -- attack whoever punched mob
@ -3134,25 +3172,25 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir, damage)
-- alert others to the attack -- alert others to the attack
local objs = minetest.get_objects_inside_radius(hitter:get_pos(), self.view_range) local objs = minetest.get_objects_inside_radius(hitter:get_pos(), self.view_range)
local obj local ent
for n = 1, #objs do for n = 1, #objs do
obj = objs[n]:get_luaentity() ent = objs[n] and objs[n]:get_luaentity()
if obj and obj._cmi_is_mob then if ent and ent._cmi_is_mob then
-- only alert members of same mob and assigned helper -- only alert members of same mob and assigned helper
if obj.group_attack == true if ent.group_attack == true
and obj.state ~= "attack" and ent.state ~= "attack"
and obj.owner ~= name and not (is_player(hitter) and ent.owner == hitter_name)
and (obj.name == self.name or obj.name == self.group_helper) then and (ent.name == self.name or ent.name == self.group_helper) then
obj:do_attack(hitter) ent:do_attack(hitter)
end end
-- have owned mobs attack player threat -- have owned mobs attack player threat
if obj.owner == name and obj.owner_loyal then if is_player(hitter) and ent.owner == hitter_name and ent.owner_loyal then
obj:do_attack(self.object) ent:do_attack(self.object)
end end
end end
end end
@ -3223,6 +3261,28 @@ function mob_class:mob_staticdata()
self.serialized_cmi_components = cmi.serialize_components(self._cmi_components) self.serialized_cmi_components = cmi.serialize_components(self._cmi_components)
end end
-- move existing variables to new table for future compatibility
-- using self.initial_properties lost some variables when backing up?!?
if not self.backup_properties then
self.backup_properties = {
hp_max = self.hp_max,
physical = self.physical,
collisionbox = self.collisionbox,
selectionbox = self.selectionbox,
visual = self.visual,
visual_size = self.visual_size,
mesh = self.mesh,
textures = self.textures,
make_footstep_sound = self.make_footstep_sound,
stepheight = self.stepheight,
glow = self.glow,
nametag = self.nametag,
damage_texture_modifier = self.damage_texture_modifier,
infotext = self.infotext
}
end
return minetest.serialize(clean_staticdata(self)) return minetest.serialize(clean_staticdata(self))
end end
@ -3426,7 +3486,7 @@ function mob_class:mob_expire(pos, dtime)
end end
end end
-- minetest.log("action", S("lifetimer expired, removed @1", self.name)) -- minetest.log("action", "lifetimer expired, removed " .. self.name)
effect(pos, 15, "tnt_smoke.png", 2, 4, 2, 0) effect(pos, 15, "tnt_smoke.png", 2, 4, 2, 0)
@ -3510,7 +3570,7 @@ function mob_class:on_step(dtime, moveresult)
-- check and stop if standing at cliff and fear of heights -- check and stop if standing at cliff and fear of heights
self.at_cliff = self:is_at_cliff() self.at_cliff = self:is_at_cliff()
if self.pause_timer <= 0 and self.at_cliff then if self.pause_timer < 0 and self.at_cliff then
self:set_velocity(0) self:set_velocity(0)
end end
@ -3667,8 +3727,8 @@ function mobs:register_mob(name, def)
minetest.register_entity(name, setmetatable({ minetest.register_entity(name, setmetatable({
stepheight = def.stepheight, stepheight = def.stepheight or 1.1,
name = name, name = (name:find(":") and name or ":"..name),
type = def.type, type = def.type,
attack_type = def.attack_type, attack_type = def.attack_type,
fly = def.fly, fly = def.fly,
@ -3921,6 +3981,8 @@ function mobs:add_mob(pos, def)
if not ent then if not ent then
--print("[mobs] entity not found " .. def.name) --print("[mobs] entity not found " .. def.name)
return false return false
else
effect(pos, 15, "tnt_smoke.png", 1, 2, 2, 15, 5)
end end
if def.child then if def.child then
@ -4155,14 +4217,16 @@ function mobs:spawn_specific(name, nodes, neighbors, min_light, max_light, inter
local mob = minetest.add_entity(pos, name) local mob = minetest.add_entity(pos, name)
-- print("[mobs] Spawned " .. name .. " at "
-- .. minetest.pos_to_string(pos) .. " on "
-- .. node.name .. " near " .. neighbors[1])
if mob_log_spawn then if mob_log_spawn then
minetest.log("[MOBS] Spawned " .. name .. " at " local pos_string = pos and minetest.pos_to_string(pos) or ""
.. minetest.pos_to_string(pos))
minetest.log(
"[MOBS] Spawned "
.. (name or "")
.. " at "
.. pos_string
)
end end
if on_spawn and mob then if on_spawn and mob then
@ -4238,7 +4302,7 @@ function mobs:register_arrow(name, def)
if not name or not def then return end -- errorcheck if not name or not def then return end -- errorcheck
minetest.register_entity(name, { minetest.register_entity( (name:find(":") and name or ":"..name) , {
physical = def.physical or false, physical = def.physical or false,
collide_with_objects = def.collide_with_objects or false, collide_with_objects = def.collide_with_objects or false,
@ -4409,7 +4473,6 @@ end
-- Register spawn eggs -- Register spawn eggs
-- Note: This also introduces the “spawn_egg” group: -- Note: This also introduces the “spawn_egg” group:
-- * spawn_egg=1: Spawn egg (generic mob, no metadata) -- * spawn_egg=1: Spawn egg (generic mob, no metadata)
-- * spawn_egg=2: Spawn egg (captured/tamed mob, metadata) -- * spawn_egg=2: Spawn egg (captured/tamed mob, metadata)
@ -4752,11 +4815,7 @@ function mobs:feed_tame(self, clicker, feed_count, breed, tame)
-- increase health -- increase health
self.health = self.health + 4 self.health = self.health + 4
if self.health >= self.hp_max then self.health = self.hp_max end
if self.health >= self.hp_max then
self.health = self.hp_max
end
self.object:set_hp(self.health) self.object:set_hp(self.health)
@ -4764,7 +4823,7 @@ function mobs:feed_tame(self, clicker, feed_count, breed, tame)
if self.child == true then if self.child == true then
-- deduct 10% of the time to adulthood -- deduct 10% of the time to adulthood
self.hornytimer = math.floor(self.hornytimer + ( self.hornytimer = floor(self.hornytimer + (
(CHILD_GROW_TIME - self.hornytimer) * 0.1)) (CHILD_GROW_TIME - self.hornytimer) * 0.1))
--print ("====", self.hornytimer) --print ("====", self.hornytimer)
return true return true
@ -4772,7 +4831,8 @@ function mobs:feed_tame(self, clicker, feed_count, breed, tame)
-- feed and tame -- feed and tame
self.food = (self.food or 0) + 1 self.food = (self.food or 0) + 1
self._breed_countdown = feed_count - self.food self._breed_countdown = breed and (feed_count - self.food)
self._tame_countdown = not self.tamed and tame and (feed_count - self.food)
if self.food >= feed_count then if self.food >= feed_count then
@ -4813,8 +4873,7 @@ function mobs:feed_tame(self, clicker, feed_count, breed, tame)
-- if mob has been tamed you can name it with a nametag -- if mob has been tamed you can name it with a nametag
if item:get_name() == "mobs:nametag" if item:get_name() == "mobs:nametag"
and (name == self.owner and (name == self.owner or minetest.check_player_privs(name, "protection_bypass")) then
or minetest.check_player_privs(name, "protection_bypass")) then
-- store mob and nametag stack in external variables -- store mob and nametag stack in external variables
mob_obj[name] = self mob_obj[name] = self
@ -4823,13 +4882,9 @@ function mobs:feed_tame(self, clicker, feed_count, breed, tame)
local tag = self.nametag or "" local tag = self.nametag or ""
local esc = minetest.formspec_escape local esc = minetest.formspec_escape
minetest.show_formspec(name, "mobs_nametag", minetest.show_formspec(name, "mobs_nametag", "size[8,4]"
"size[8,4]" .. .. "field[0.5,1;7.5,0;name;" .. esc(FS("Enter name:")) .. ";" .. tag .. "]"
"field[0.5,1;7.5,0;name;" .. .. "button_exit[2.5,3.5;3,1;mob_rename;" .. esc(FS("Rename")) .. "]")
esc(S("Enter name:")) ..
";" .. tag .. "]" ..
"button_exit[2.5,3.5;3,1;mob_rename;" ..
esc(S("Rename")) .. "]")
return true return true
end end
@ -4844,9 +4899,9 @@ function mobs:feed_tame(self, clicker, feed_count, breed, tame)
end end
minetest.chat_send_player(clicker:get_player_name(), minetest.chat_send_player(clicker:get_player_name(),
S("@1 follows:\n- @2", S("@1 follows:",
self.name:split(":")[2], self.name:split(":")[2]) .. "\n" ..
table.concat(self.follow, "\n- "))) table.concat(self.follow, "\n- "))
end end
end end
@ -4907,10 +4962,10 @@ function mobs:alias_mob(old_name, new_name)
end end
-- spawn egg -- spawn egg
minetest.register_alias(old_name, new_name) minetest.register_alias( (old_name:find(":") and old_name or ":"..old_name), new_name)
-- entity -- entity
minetest.register_entity(":" .. old_name, { minetest.register_entity( ":"..old_name , {
physical = false, static_save = false, physical = false, static_save = false,

View File

@ -387,6 +387,15 @@ for each mob.
in it's name. 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:stop_attack() -- stops mob attacking
Adding Mobs in World Adding Mobs in World
-------------------- --------------------

View File

@ -1,5 +1,6 @@
local S = mobs.intllib local S = mobs.translate
local FS = function(...) return minetest.formspec_escape(S(...)) end
local mc2 = minetest.get_modpath("mcl_core") local mc2 = minetest.get_modpath("mcl_core")
-- recipe items -- recipe items
@ -334,9 +335,9 @@ minetest.register_tool(":mobs:mob_reset_stick", {
minetest.show_formspec(name, "mobs_texture", "size[8,4]" minetest.show_formspec(name, "mobs_texture", "size[8,4]"
.. "field[0.5,1;7.5,0;name;" .. "field[0.5,1;7.5,0;name;"
.. minetest.formspec_escape(S("Enter texture:")) .. ";" .. bt .. "]" .. FS("Enter texture:") .. ";" .. bt .. "]"
.. "button_exit[2.5,3.5;3,1;mob_texture_change;" .. "button_exit[2.5,3.5;3,1;mob_texture_change;"
.. minetest.formspec_escape(S("Change")) .. "]") .. FS("Change") .. "]")
end end
end end
}) })

View File

@ -21,6 +21,9 @@ dofile(path .. "/crafts.lua")
dofile(path .. "/spawner.lua") dofile(path .. "/spawner.lua")
-- Lucky Blocks -- Lucky Blocks
dofile(path .. "/lucky_block.lua") if minetest.get_modpath("lucky_block") then
dofile(path .. "/lucky_block.lua")
end
print("[MOD] Mobs Redo loaded") print("[MOD] Mobs Redo loaded")

View File

@ -1,34 +1,38 @@
# textdomain:mobs # textdomain: mobs
#** Peaceful Mode Active - No Monsters Will Spawn= ** Peaceful Mode Active - No Monsters Will Spawn=** Friedlicher Modus aktiv - Es werden keine Monster spawnen
@1 (Tamed)=@1 (Gezähmt) Active Mob Limit Reached!=Aktives Mob-Limit erreicht!
@1 at full health (@2)=@1 bei voller Gesundheit (@2)
@1 has been tamed!=@1 wurde gezähmt!
@1 is owner!=@1 ist der Besitzer!
#Active Mob Limit Reached!=
Already protected!=Bereits geschützt!
#Change=
#Command:=
Enter name:=Namen eingeben:
#Enter texture:=
Lasso (right-click animal to put in inventory)=Lasso (Rechtsklick auf Tier, um es zu nehmen)
Leather=Leder
Meat=Fleisch
Missed!=Daneben!
Mob Fence=Kreaturen Zaun
#Mob Fence Top=
Mob Protection Rune=Kreaturschutzrune
#Mob Reset Stick=
#Mob Spawner=
Mob Spawner settings failed!=Kreaturenspawner-Einstellungen gescheitert!
Mob has been protected!=Kreatur wurde geschützt! Mob has been protected!=Kreatur wurde geschützt!
Name Tag=Namensschild @1 (Tamed)=@1 (Gezähmt)
Net (right-click animal to put in inventory)=Netz (Rechtsklick auf Tier, um es zu nehmen)
Not tamed!=Nicht gezähmt! Not tamed!=Nicht gezähmt!
Raw Meat=Rohes Fleisch @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 Rename=Umbenennen
Saddle=Sattel Name Tag=Namensschild
Spawner Active (@1)=Spawner aktiv (@1) Leather=Leder
Spawner Not Active (enter settings)=Nicht aktiv (Einstellungen eingeben) 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) Steel Shears (right-click to shear)=Stahlschere (Rechtsklick zum Scheren)
#Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] player_distance[1-20] y_offset[-10 to 10]”= Mob Protection Rune=Kreaturschutzrune
#lifetimer expired, removed @1= 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=Rohfleisch Blokc
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]”=

View File

@ -1,34 +1,38 @@
# textdomain:mobs # textdomain: mobs
#** Peaceful Mode Active - No Monsters Will Spawn= ** Peaceful Mode Active - No Monsters Will Spawn=
#@1 (Tamed)= Active Mob Limit Reached!=
#@1 at full health (@2)= Mob has been protected!=
#@1 has been tamed!= @1 (Tamed)=
#@1 is owner!= Not tamed!=
#Active Mob Limit Reached!= @1 is owner!=
#Already protected!= Missed!=
#Change= Already protected!=
#Command:= @1 has been tamed!=
#Enter name:= @1 follows:=
#Enter texture:= @1 mobs removed.=
#Lasso (right-click animal to put in inventory)= Enter name:=
#Leather= Rename=
#Meat= Name Tag=
#Missed!= Leather=
#Mob Fence= Raw Meat=
#Mob Fence Top= Meat=
#Mob Protection Rune= Lasso (right-click animal to put in inventory)=
#Mob Reset Stick= Net (right-click animal to put in inventory)=
#Mob Spawner= Steel Shears (right-click to shear)=
#Mob Spawner settings failed!= Mob Protection Rune=
#Mob has been protected!= Mob Protection Rune (Level 2)=
#Name Tag= Saddle=
#Net (right-click animal to put in inventory)= Mob Fence=
#Not tamed!= Mob Fence Top=
#Raw Meat= Mob Reset Stick=
#Rename= Meat Block=
#Saddle= Raw Meat Block=
#Spawner Active (@1)= Enter texture:=
#Spawner Not Active (enter settings)= Change=
#Steel Shears (right-click to shear)= Mob Spawner=
#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]”= (mob name) (min light) (max light) (amount) (player distance) (Y offset)=
#lifetimer expired, removed @1= 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]”=

View File

@ -1,34 +1,38 @@
# textdomain:mobs # textdomain: mobs
#** Peaceful Mode Active - No Monsters Will Spawn= ** Peaceful Mode Active - No Monsters Will Spawn=
@1 (Tamed)=@1 (Domesticado) Active Mob Limit Reached!=
@1 at full health (@2)=@1 con salud llena (@2)
@1 has been tamed!=@1 ha sido domesticado!
@1 is owner!=@1 es el dueño!
#Active Mob Limit Reached!=
Already protected!=Ya está protegido!
#Change=
#Command:=
Enter name:=Ingrese nombre:
#Enter texture:=
Lasso (right-click animal to put in inventory)=Lazo (click derecho en animal para colocar en inventario)
Leather=Cuero
Meat=Carne
Missed!=Perdido!
#Mob Fence=
#Mob Fence Top=
Mob Protection Rune=Runa de protección de Mob
#Mob Reset Stick=
#Mob Spawner=
Mob Spawner settings failed!=Configuracion de generador de Mob falló!
Mob has been protected!=El mob ha sido protegido! Mob has been protected!=El mob ha sido protegido!
Name Tag=Nombrar etiqueta @1 (Tamed)=@1 (Domesticado)
Net (right-click animal to put in inventory)=Red (click derecho en animal para colocar en inventario)
Not tamed!=No domesticado! Not tamed!=No domesticado!
Raw Meat=Carne cruda @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 Rename=Renombrar
Saddle=Montura Name Tag=Nombrar etiqueta
Spawner Active (@1)=Generador activo (@1) Leather=Cuero
Spawner Not Active (enter settings)=Generador no activo (ingrese config) 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) Steel Shears (right-click to shear)=Tijera de acero (click derecho para esquilar)
#Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] player_distance[1-20] y_offset[-10 to 10]”= Mob Protection Rune=Runa de protección de Mob
#lifetimer expired, removed @1= 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]”=

View File

@ -1,34 +1,38 @@
# textdomain:mobs # textdomain: mobs
** Peaceful Mode Active - No Monsters Will Spawn=** Mode pacifique activé - aucun monstre ne sera généré ** Peaceful Mode Active - No Monsters Will Spawn=** Mode pacifique activé - aucun monstre ne sera généré
@1 (Tamed)=@1 (apprivoisé)
@1 at full health (@2)=@1 est en pleine forme (@2)
@1 has been tamed!=@1 a été apprivoisé !
@1 is owner!=Appartient à @1 !
Active Mob Limit Reached!=Limite atteinte du nombre des êtres vivants actifs ! Active Mob Limit Reached!=Limite atteinte du nombre des êtres vivants actifs !
Already protected!=Déjà protégé ! Mob has been protected!=L'animal a été protégé !
Change=Changer @1 (Tamed)=@1 (apprivoisé)
Command:=Commande : Not tamed!=Non-apprivoisé !
Enter name:=Saisissez un nom : @1 is owner!=Appartient à @1 !
Enter texture:=Saisissez une texture :
Lasso (right-click animal to put in inventory)=Lasso (clic droit sur l'animal pour le mettre dans l'inventaire)
Leather=Cuir
Meat=Viande
Missed!=Raté ! 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= Clôture à animaux
Mob Fence Top=Haut de clôture à animaux Mob Fence Top=Haut de clôture à animaux
Mob Protection Rune=Rune de protection des animaux
Mob Reset Stick=Baguette de réinitialisation des êtres vivants Mob 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 Spawner=Créateur d'êtres vivants
Mob Spawner settings failed!=Échec des paramètres du créateur d'être vivants ! (mob name) (min light) (max light) (amount) (player distance) (Y offset)=
Mob has been protected!=L'animal a été protégé ! Command:=Commande :
Name Tag=Étiquette de collier
Net (right-click animal to put in inventory)=Filet (clic droit sur l'animal pour le mettre dans l'inventaire)
Not tamed!=Non-apprivoisé !
Raw Meat=Viande crue
Rename=Renommer
Saddle=Selle
Spawner Active (@1)=Créateur actif (@1)
Spawner Not Active (enter settings)=Créateur non actif (entrez les paramètres) Spawner Not Active (enter settings)=Créateur non actif (entrez les paramètres)
Steel Shears (right-click to shear)=Ciseaux à laine (clic droit pour tondre) 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]» Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] player_distance[1-20] y_offset[-10 to 10]”=Syntaxe : «name min_lumière[0-14] max_lumière[0-14] max_être_vivant_dans_région[0 pour désactiver] distance_joueur[1-20] décalage_y[-10 to 10]»
lifetimer expired, removed @1=Être immortel expiré ; @1 retiré

View File

@ -1,34 +1,38 @@
# textdomain:mobs # textdomain: mobs
** Peaceful Mode Active - No Monsters Will Spawn=** Modalità pacifica attiva - non comparirà nessun mostro ** Peaceful Mode Active - No Monsters Will Spawn=** Modalità pacifica attiva - non comparirà nessun mostro
@1 (Tamed)=@1 (Addomesticato) Active Mob Limit Reached!=
@1 at full health (@2)=@1 in piena salute (@2)
@1 has been tamed!=@1 è stato addomesticato!
@1 is owner!=Il padrone è @1!
#Active Mob Limit Reached!=
Already protected!=Già protetto!
#Change=
#Command:=
Enter name:=Inserire il nome:
#Enter texture:=
Lasso (right-click animal to put in inventory)=Lazo (click di destro per mettere l'animale nell'inventario)
Leather=Pelle
Meat=Carne
Missed!=Mancato!
Mob Fence=Recinzione per mob
#Mob Fence Top=
Mob Protection Rune=Runa di protezione per mob
#Mob Reset Stick=
#Mob Spawner=
Mob Spawner settings failed!=Impostazioni del generatore di mob fallite!
Mob has been protected!=Il mob è stato protetto! Mob has been protected!=Il mob è stato protetto!
Name Tag=Targhetta @1 (Tamed)=@1 (Addomesticato)
Net (right-click animal to put in inventory)=Rete (click destro per mettere l'animale nell'inventario)
Not tamed!=Non addomesticato! Not tamed!=Non addomesticato!
Raw Meat=Carne cruda @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 Rename=Rinomina
Saddle=Sella Name Tag=Targhetta
Spawner Active (@1)=Generatore attivo (@1) Leather=Pelle
Spawner Not Active (enter settings)=Generatore inattivo (inserire le impostazioni) 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) Steel Shears (right-click to shear)=Cesoie d'acciaio (click destro per tosare)
#Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] player_distance[1-20] y_offset[-10 to 10]”= Mob Protection Rune=Runa di protezione per mob
#lifetimer expired, removed @1= 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]”=

View File

@ -1,34 +1,38 @@
# textdomain:mobs # textdomain: mobs
** Peaceful Mode Active - No Monsters Will Spawn=** Mod Aman Diaktifkan - Tiada Raksasa Akan Muncul ** Peaceful Mode Active - No Monsters Will Spawn=** Mod Aman Diaktifkan - Tiada Raksasa Akan Muncul
@1 (Tamed)=@1 (Jinak) Active Mob Limit Reached!=
@1 at full health (@2)=Mata kesihatan @1 telah penuh (@2)
@1 has been tamed!=@1 telah dijinakkan!
@1 is owner!=Ini hak milik @1!
#Active Mob Limit Reached!=
Already protected!=Telah dilindungi!
#Change=
#Command:=
Enter name:=Masukkan nama:
#Enter texture:=
Lasso (right-click animal to put in inventory)=Tanjul (klik-kanan haiwan untuk masukkan ke inventori)
Leather=Kulit
Meat=Daging Bakar
Missed!=Terlepas!
Mob Fence=Pagar Mob
#Mob Fence Top=
Mob Protection Rune=Rune Perlindungan Mob
#Mob Reset Stick=
#Mob Spawner=
Mob Spawner settings failed!=Penetapan Pewujud Mob gagal!
Mob has been protected!=Mob telah pun dilindungi! Mob has been protected!=Mob telah pun dilindungi!
Name Tag=Tanda Nama @1 (Tamed)=@1 (Jinak)
Net (right-click animal to put in inventory)=Jaring (klik-kanan haiwan untuk masukkan ke inventori)
Not tamed!=Belum dijinakkan! Not tamed!=Belum dijinakkan!
Raw Meat=Daging Mentah @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 Rename=Namakan semula
Saddle=Pelana Name Tag=Tanda Nama
Spawner Active (@1)=Pewujud Mob Aktif (@1) Leather=Kulit
Spawner Not Active (enter settings)=Pewujud Mob Tidak Aktif (masukkan tetapan) 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) Steel Shears (right-click to shear)=Ketam Keluli (klik-kanan untuk mengetam bulu biri-biri)
#Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] player_distance[1-20] y_offset[-10 to 10]”= Mob Protection Rune=Rune Perlindungan Mob
#lifetimer expired, removed @1= 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]”=

View File

@ -1,34 +1,38 @@
# textdomain:mobs # textdomain: mobs
#** Peaceful Mode Active - No Monsters Will Spawn= ** Peaceful Mode Active - No Monsters Will Spawn=
#@1 (Tamed)= Active Mob Limit Reached!=
@1 at full health (@2)=@1 em plena saude (@2) Mob has been protected!=
@1 has been tamed!=@1 foi domesticado! @1 (Tamed)=
@1 is owner!=Dono @1!
#Active Mob Limit Reached!=
#Already protected!=
#Change=
#Command:=
Enter name:=Insira um nome:
#Enter texture:=
Lasso (right-click animal to put in inventory)=Laço (clique-direito no animal para por no inventario)
Leather=Couro
Meat=Carne
Missed!=Faltou!
#Mob Fence=
#Mob Fence Top=
#Mob Protection Rune=
#Mob Reset Stick=
#Mob Spawner=
Mob Spawner settings failed!=Configuraçao de Spawnador do Mob falhou!
#Mob has been protected!=
Name Tag=Etiqueta
Net (right-click animal to put in inventory)=Net (clique-direito no animal para por no inventario)
Not tamed!=Indomesticado! Not tamed!=Indomesticado!
Raw Meat=Carne crua @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 Rename=Renomear
#Saddle= Name Tag=Etiqueta
Spawner Active (@1)=Spawnador Ativo (@1) Leather=Couro
Spawner Not Active (enter settings)=Spawnador Inativo (configurar) 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) Steel Shears (right-click to shear)=Tesoura de Aço (clique-direito para tosquiar)
#Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] player_distance[1-20] y_offset[-10 to 10]”= Mob Protection Rune=
#lifetimer expired, removed @1= 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]”=

View File

@ -1,34 +1,38 @@
# textdomain:mobs # textdomain: mobs
** Peaceful Mode Active - No Monsters Will Spawn=** Мирный модус активирован - монстры не спаунятся ** Peaceful Mode Active - No Monsters Will Spawn=** Мирный модус активирован - монстры не спаунятся
@1 (Tamed)=@1 (Прирученный) Active Mob Limit Reached!=
@1 at full health (@2)=@1 при полном здоровье (@2)
@1 has been tamed!=@1 приручен
@1 is owner!=@1 владелец
#Active Mob Limit Reached!=
Already protected!=Уже защищен!
#Change=
#Command:=
Enter name:=Введите имя:
#Enter texture:=
Lasso (right-click animal to put in inventory)=Лассо (Правый клик - положить животное в инвентарь)
Leather=Кожа
Meat=Мясо
Missed!=Промазал!
Mob Fence=Забор от мобов
#Mob Fence Top=
Mob Protection Rune=Защитная руна мобов
#Mob Reset Stick=
#Mob Spawner=
Mob Spawner settings failed!=Настройки спаунера моба провалились
Mob has been protected!=Моб защищен! Mob has been protected!=Моб защищен!
Name Tag=Новый тэг @1 (Tamed)=@1 (Прирученный)
Net (right-click animal to put in inventory)=Сеть (Правый клик - положить животное в инвентарь)
Not tamed!=Не прирученный Not tamed!=Не прирученный
Raw Meat=Сырое мясо @1 is owner!=@1 владелец
Missed!=Промазал!
Already protected!=Уже защищен!
@1 has been tamed!=@1 приручен
@1 follows:=
@1 mobs removed.=
Enter name:=Введите имя:
Rename=Переименовать Rename=Переименовать
Saddle=Седло Name Tag=Новый тэг
Spawner Active (@1)=Активные спаунер (@1) Leather=Кожа
Spawner Not Active (enter settings)=Спаунер не активен (введите настройки) 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)=Ножницы (Правый клик - подстричь) Steel Shears (right-click to shear)=Ножницы (Правый клик - подстричь)
#Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] player_distance[1-20] y_offset[-10 to 10]”= Mob Protection Rune=Защитная руна мобов
#lifetimer expired, removed @1= 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)=Активные спаунер (@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]”=

View File

@ -1,34 +1,38 @@
# textdomain:mobs # textdomain: mobs
#** Peaceful Mode Active - No Monsters Will Spawn= ** Peaceful Mode Active - No Monsters Will Spawn=
#@1 (Tamed)= Active Mob Limit Reached!=
@1 at full health (@2)=@1 tam canında (@2) Mob has been protected!=
@1 has been tamed!=@1 tamamen evcilleştirilmiştir! @1 (Tamed)=
@1 is owner!=Sahibi @1!
#Active Mob Limit Reached!=
#Already protected!=
#Change=
#Command:=
Enter name:=İsim gir:
#Enter texture:=
Lasso (right-click animal to put in inventory)=Kement (hayvana sağ tıklayarak envantere koy)
Leather=Deri
Meat=Et
Missed!=Kaçırdın!
Mob Fence=Canavar Yaratıcı
#Mob Fence Top=
#Mob Protection Rune=
#Mob Reset Stick=
#Mob Spawner=
Mob Spawner settings failed!=Yaratıcı ayarları uygulanamadı.
#Mob has been protected!=
Name Tag=İsim etiketi
Net (right-click animal to put in inventory)=Ağ (hayvana sağ tıklayarak envantere koy)
Not tamed!=Evcil değil! Not tamed!=Evcil değil!
Raw Meat=Çiğ et @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 Rename=Yeniden adlandır
#Saddle= Name Tag=İsim etiketi
Spawner Active (@1)=Yaratıcı aktif (@1) Leather=Deri
Spawner Not Active (enter settings)=Yaratıcı aktif değil (ayarlara gir) 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) Steel Shears (right-click to shear)=Çelik makas (sağ tıklayarak kes)
#Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] player_distance[1-20] y_offset[-10 to 10]”= Mob Protection Rune=
#lifetimer expired, removed @1= 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]”=

View File

@ -1,34 +1,38 @@
# textdomain:mobs # textdomain: mobs
** Peaceful Mode Active - No Monsters Will Spawn=** 和平模式已激活——没有怪物会产生 ** Peaceful Mode Active - No Monsters Will Spawn=** 和平模式已激活——没有怪物会产生
@1 (Tamed)=@1已驯服 Active Mob Limit Reached!=
@1 at full health (@2)=@1已经满血@2
@1 has been tamed!=@1已经被驯服
@1 is owner!=@1 是主人
#Active Mob Limit Reached!=
Already protected!=已经被保护!
#Change=
#Command:=
Enter name:=输入名称:
#Enter texture:=
Lasso (right-click animal to put in inventory)=套索(右键单击动物以放入物品栏)
Leather=皮革
Meat=肉
Missed!=没抓住!
Mob Fence=Mob 栅栏
#Mob Fence Top=
Mob Protection Rune=Mob 保护符文
#Mob Reset Stick=
#Mob Spawner=
Mob Spawner settings failed!=Mob 孵化器设置失败!
Mob has been protected!=Mob 已经被保护了! Mob has been protected!=Mob 已经被保护了!
Name Tag=名称标签 @1 (Tamed)=@1已驯服
Net (right-click animal to put in inventory)=网(右键单击动物以放入物品栏)
Not tamed!=没有驯服! Not tamed!=没有驯服!
Raw Meat=生肉 @1 is owner!=@1 是主人
Missed!=没抓住!
Already protected!=已经被保护!
@1 has been tamed!=@1已经被驯服
@1 follows:=
@1 mobs removed.=
Enter name:=输入名称:
Rename=重新命名 Rename=重新命名
Saddle=鞍 Name Tag=名称标签
Spawner Active (@1)=孵化器正在运转(@1 Leather=皮革
Spawner Not Active (enter settings)=孵化器未使用(输入设置) 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)=钢剪(右键单击以剪切) Steel Shears (right-click to shear)=钢剪(右键单击以剪切)
#Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] player_distance[1-20] y_offset[-10 to 10]”= Mob Protection Rune=Mob 保护符文
#lifetimer expired, removed @1= 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]”=

View File

@ -1,34 +1,38 @@
# textdomain:mobs # textdomain: mobs
** Peaceful Mode Active - No Monsters Will Spawn=** 和平模式已激活——沒有怪物會產生 ** Peaceful Mode Active - No Monsters Will Spawn=** 和平模式已激活——沒有怪物會產生
@1 (Tamed)=@1已馴服 Active Mob Limit Reached!=
@1 at full health (@2)=@1已經滿血@2
@1 has been tamed!=@1已經被馴服
@1 is owner!=@1 是主人
#Active Mob Limit Reached!=
Already protected!=已經被保護!
#Change=
#Command:=
Enter name:=輸入名稱:
#Enter texture:=
Lasso (right-click animal to put in inventory)=套索(右鍵單擊動物以放入物品欄)
Leather=皮革
Meat=肉
Missed!=沒抓住!
Mob Fence=Mob 柵欄
#Mob Fence Top=
Mob Protection Rune=Mob 保護符文
#Mob Reset Stick=
#Mob Spawner=
Mob Spawner settings failed!=Mob 孵化器設置失敗!
Mob has been protected!=Mob 已經被保護了! Mob has been protected!=Mob 已經被保護了!
Name Tag=名稱標籤 @1 (Tamed)=@1已馴服
Net (right-click animal to put in inventory)=網(右鍵單擊動物以放入物品欄)
Not tamed!=沒有馴服! Not tamed!=沒有馴服!
Raw Meat=生肉 @1 is owner!=@1 是主人
Missed!=沒抓住!
Already protected!=已經被保護!
@1 has been tamed!=@1已經被馴服
@1 follows:=
@1 mobs removed.=
Enter name:=輸入名稱:
Rename=重新命名 Rename=重新命名
Saddle=鞍 Name Tag=名稱標籤
Spawner Active (@1)=孵化器正在運轉(@1 Leather=皮革
Spawner Not Active (enter settings)=孵化器未使用(輸入設置) 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)=鋼剪(右鍵單擊以剪切) Steel Shears (right-click to shear)=鋼剪(右鍵單擊以剪切)
#Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] player_distance[1-20] y_offset[-10 to 10]”= Mob Protection Rune=Mob 保護符文
#lifetimer expired, removed @1= 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]”=

View File

@ -1,18 +1,15 @@
if minetest.get_modpath("lucky_block") then lucky_block:add_blocks({
{"dro", {"mobs:meat_raw"}, 5},
lucky_block:add_blocks({ {"dro", {"mobs:meat"}, 5},
{"dro", {"mobs:meat_raw"}, 5}, {"dro", {"mobs:nametag"}, 1},
{"dro", {"mobs:meat"}, 5}, {"dro", {"mobs:leather"}, 5},
{"dro", {"mobs:nametag"}, 1}, {"dro", {"default:stick"}, 10},
{"dro", {"mobs:leather"}, 5}, {"dro", {"mobs:net"}, 1},
{"dro", {"default:stick"}, 10}, {"dro", {"mobs:lasso"}, 1},
{"dro", {"mobs:net"}, 1}, {"dro", {"mobs:shears"}, 1},
{"dro", {"mobs:lasso"}, 1}, {"dro", {"mobs:protector"}, 1},
{"dro", {"mobs:shears"}, 1}, {"dro", {"mobs:fence_wood"}, 10},
{"dro", {"mobs:protector"}, 1}, {"dro", {"mobs:fence_top"}, 12},
{"dro", {"mobs:fence_wood"}, 10}, {"lig"}
{"dro", {"mobs:fence_top"}, 12}, })
{"lig"}
})
end

View File

@ -1,4 +1,5 @@
name = mobs name = mobs
depends =default depends =default
optional_depends = tnt, player_api, dye, farming, invisibility, intllib, lucky_block, cmi, toolranks, pathfinder, mtobjid
description = MOBS api for mobs to add animals or monsters etc description = MOBS api for mobs to add animals or monsters etc
optional_depends = tnt, player_api, invisibility, intllib, lucky_block, cmi, toolranks, pathfinder, mtobjid
min_minetest_version = 5.0

View File

@ -1,8 +1,10 @@
-- lib_mount by Blert2112 (edited by TenPlus1) -- lib_mount by Blert2112 (edited by TenPlus1)
--[[ one of these is needed (for now) to ride mobs, otherwise no riding for you local is_pa = minetest.get_modpath("player_api") -- 5.x compatibility
if not minetest.get_modpath("default") local is_mc2 = minetest.get_modpath("mcl_mobs") -- MineClone2 check
or not minetest.get_modpath("player_api") then
-- one of these is needed to ride mobs, otherwise no riding for you
if not minetest.get_modpath("default") and not is_pa and not is_mc2 then
function mobs.attach() end function mobs.attach() end
function mobs.detach() end function mobs.detach() end
@ -11,10 +13,6 @@ or not minetest.get_modpath("player_api") then
return return
end end
]]
local is_pa = minetest.get_modpath("player_api") -- 5.x compatibility
local is_mc2 = minetest.get_modpath("mcl_mobs") -- MineClone2 compatibility
-- are we a real player ? -- are we a real player ?
local function is_player(player) local function is_player(player)
@ -25,7 +23,7 @@ local function is_player(player)
return false return false
end end
-- Localise some functions
local abs, cos, floor, sin, sqrt, pi = local abs, cos, floor, sin, sqrt, pi =
math.abs, math.cos, math.floor, math.sin, math.sqrt, math.pi math.abs, math.cos, math.floor, math.sin, math.sqrt, math.pi
@ -117,15 +115,17 @@ local function force_detach(player)
local name = player:get_player_name() local name = player:get_player_name()
if is_pa then if is_mc2 then
player_api.player_attached[name] = false
player_api.set_animation(player, "stand", 30)
elseif is_mc2 then
mcl_player.player_attached[player:get_player_name()] = false mcl_player.player_attached[player:get_player_name()] = false
mcl_player.player_set_animation(player, "stand", 30) mcl_player.player_set_animation(player, "stand", 30)
else else
if is_pa then
player_api.player_attached[name] = false
player_api.set_animation(player, "stand", 30)
else
default.player_attached[name] = false default.player_attached[name] = false
default.player_set_animation(player, "stand", 30) default.player_set_animation(player, "stand", 30)
end
end end
player:set_eye_offset({x = 0, y = 0, z = 0}, {x = 0, y = 0, z = 0}) player:set_eye_offset({x = 0, y = 0, z = 0}, {x = 0, y = 0, z = 0})
@ -209,12 +209,14 @@ function mobs.attach(entity, player)
force_detach(player) force_detach(player)
if is_pa then if is_mc2 then
player_api.player_attached[player:get_player_name()] = true
elseif is_mc2 then
mcl_player.player_attached[player:get_player_name()] = true mcl_player.player_attached[player:get_player_name()] = true
else else
if is_pa then
player_api.player_attached[player:get_player_name()] = true
else
default.player_attached[player:get_player_name()] = true default.player_attached[player:get_player_name()] = true
end
end end
player:set_attach(entity.object, "", attach_at, entity.player_rotation) player:set_attach(entity.object, "", attach_at, entity.player_rotation)
@ -231,12 +233,14 @@ function mobs.attach(entity, player)
if is_player(player) then if is_player(player) then
if is_pa then if is_mc2 then
player_api.set_animation(player, "sit", 30)
elseif is_mc2 then
mcl_player.player_set_animation(player, "sit_mount" , 30) mcl_player.player_set_animation(player, "sit_mount" , 30)
else else
if is_pa then
player_api.set_animation(player, "sit", 30)
else
default.player_set_animation(player, "sit", 30) default.player_set_animation(player, "sit", 30)
end
end end
end end
end) end)

View File

@ -4,7 +4,7 @@ MOBS REDO for MINETEST
This mod contains the API only for adding your own mobs into the world, so 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. please use the additional modpacks to add animals, monsters, and npcs.
https://forum.minetest.net/viewtopic.php?f=11&t=9917 https://codeberg.org/minenux/minetest-mod-mobs_redo
Information Information
----------- -----------
@ -12,6 +12,10 @@ Information
Built from PilzAdam's original Simple Mobs with additional mobs by KrupnoPavel, Built from PilzAdam's original Simple Mobs with additional mobs by KrupnoPavel,
Zeg9, ExeterDad and AspireMint. Zeg9, ExeterDad and AspireMint.
This mod is special one already compatible with older engines.. with backported
patches to work both in multicraft, minetest, mineclone and finetest, becouse
the tenplus1 only works in last minetest, admins will not wants to constant upgrades!
## Crafts ## Crafts
- **Nametag**. Can be crafted by paper, black dye, and string. Can be used - **Nametag**. Can be crafted by paper, black dye, and string. Can be used

View File

@ -1,5 +1,5 @@
local S = mobs.intllib local S = mobs.translate
-- are we a real player ? -- are we a real player ?
@ -31,8 +31,7 @@ minetest.register_node("mobs:spawner", {
.. " (player distance) (Y offset)") .. " (player distance) (Y offset)")
-- text entry formspec -- text entry formspec
meta:set_string("formspec", meta:set_string("formspec", "size[10,3.5]"
"size[10,3.5]"
.. "label[0.15,0.5;" .. minetest.formspec_escape(head) .. "]" .. "label[0.15,0.5;" .. minetest.formspec_escape(head) .. "]"
.. "field[1,2.5;8.5,0.8;text;" .. S("Command:") .. "field[1,2.5;8.5,0.8;text;" .. S("Command:")
.. ";${command}]") .. ";${command}]")

View File

@ -1,19 +0,0 @@
#!/bin/sh
set -eu
FIXED=0
for f in ./*.png; do
WARN="$(pngcrush -n -warn "$f" 2>&1)"
printf %s\\n "file = $f" "warn = $WARN"
case "$WARN" in
*'PCS illuminant is not D50'*|*'known incorrect sRGB profile'* )
pngcrush -s -ow -rem allb -reduce "$f"
FIXED=$((FIXED + 1))
;;
esac
pngquant -v -f --ext .png --quality 0-50 --speed 1 "$f"
done
printf %s\\n "$FIXED errors fixed"