replaced mobs mods by submodules

master
Kyra Zimmer 2020-08-09 20:52:09 +02:00
parent 8751463872
commit 1157984442
262 changed files with 16 additions and 22920 deletions

12
.gitmodules vendored
View File

@ -16,3 +16,15 @@
[submodule "mods/bows"]
path = mods/bows
url = https://notabug.org/TenPlus1/bows.git
[submodule "mods/mobs_animal"]
path = mods/mobs_animal
url = https://notabug.org/TenPlus1/mobs_animal.git
[submodule "mods/mobs_monster"]
path = mods/mobs_monster
url = https://notabug.org/TenPlus1/mobs_monster.git
[submodule "mods/mobs_npc"]
path = mods/mobs_npc
url = https://notabug.org/TenPlus1/mobs_npc.git
[submodule "mods/mobs_redo"]
path = mods/mobs_redo
url = https://notabug.org/TenPlus1/mobs_redo.git

View File

@ -1,21 +0,0 @@
MIT License
Copyright (c) 2019 TheTermos
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.

File diff suppressed because it is too large Load Diff

View File

@ -1,545 +0,0 @@
Contents
1 Concepts
1.1 Behavior functions
1.1.1 Low level functions
1.1.2 High level functions
1.1.2.1 Priority
1.2 Logic function
1.3 Processing diagram
1.4 Entity definition
1.5 Exposed luaentity members
2 Reference
2.1 Utility functions
2.2 Built in behaviors
2.2.1 High level behaviors
2.2.2 Low level behaviors
2.3 Constants and member variables
-----------
1. Concepts
-----------
1.1 Behavior functions
These are the most fundamental units of code, every action entities can perform is a separate function.
There are two types of behaviors:
- low level, these govern physical actions and interactions (think moves)
- high level, these are logical structures governing low level behaviors in order to perform more complex tasks
Behaviors run for considerable amount of time, this means the functions are being called repeatedly on consecutive engine steps.
Therefore a need for preserving state between calls, this is why they are implemented as closures, see defining conventions for details.
Behavior functions are active until they finish the job, are removed from the queue or superseded by a higher priority behavior.
They signal finished state by returning true, therefore it's very important to carefully design the completion conditions
For a behavior to begin executing it has to be put on a queue. There are two separate queues, one for low and one for high level behaviors.
Queuing is covered by behavour defining conventions
!!! In simplest scenarios there's no need to code behaviors, much can be achieved using only built-in stuff !!!
!!! To start using the api it's enough to learn defining mobs and writing brain functions !!!
1.1.1 Low level behavior functions
These are physical actions and interactions: steps, jumps, turns etc. here you'll set velocity, yaw, kick off animations and sounds.
Low level behavior definition:
function mobkit.lq_bhv1(self,[optional additional persistent parameters]) -- enclosing function
... -- optional definitions of additional persistent variables
local func=function(self) -- enclosed function, self is mandatory and the only allowed parameter
... -- actual function definition, remember to return true eventually
end
mobkit.queue_low(self,func) -- this will queue the behavior at the time of lq_bhv1 call
end
1.1.2 High level behavior functions
These are complex tasks like getting to a position, following other objects, hiding, patrolling an area etc.
Their job is tracking changes in the environment and managing low level behavior queue accordingly.
High level behavior definition:
function mobkit.hq_bhv1(self,priority,[optional additional persistent parameters]) -- enclosing function
... -- optional definitions of additional persistent variables
local func=function(self) -- enclosed function, self is mandatory and the only allowed parameter
... -- actual function definition, remember to return true eventually
end
mobkit.queue_high(self,func,priority) -- this will queue the behavior at the time of hq_bhv1 call
end
1.1.2.1 Priority
Unlike low level behaviors which are executed in FIFO order, high level behaviors support prioritization.
This concept is essential for making sure the right behavior is active at the right time.
Prioritization is what makes it possible to interrupt a task in order to perform a more important one
The currently executing behavior is always the first in the queue.
When a new behavior is placed onto the queue:
If the queue is not empty a new behavior is inserted before the first behavior of lower priority if such exists, or last.
If the new behavior supersedes the one currently executing, low level queue is purged immediately.
Common idioms:
hq_bhv1(self,prty):
...
hq_bhv2(self,prty) -- bhv1 kicks off bhv2 with equal priority
return true -- and ends,
-- bhv2 becomes active on the next engine step.
hq_bhv1(self,prty):
...
hq_bhv2(self,prty+1) -- bhv1 kicks off bhv2 with higher priority
-- bhv2 takes over and when it ends, bhv1 resumes.
Particular prioritization scheme is to be designed by the user according to specific mod requirements.
1.2 Logic function
------------------
Every mob must have one.
Its job is managing high level behavior queue in response to events which are not intercepted by callbacks.
Contrary to what the name suggests, these functions needn't necessarily be too complex thanks to their limited responsibilities.
Typical flow might look like this:
if mobkit.timer(self,1) then -- returns true approx every second
local prty = mobkit.get_queue_priority(self)
if prty < 20
if ... then
hq_do_important_stuff(self,20)
return
end
end
if prty < 10 then
if ... then
hq_do_something_else(self,10)
return
elseif ... then
hq_do_this_instead(self,10)
return
end
end
if mobkit.is_queue_empty_high(self) then
hq_fool_around(self,0)
end
end
1.3 Processing diagram
----------------------
---------------------------------------
| PHYSICS |
| |
| ----------------------- |
| | Logic Function | |
| ----------------------- |
| | |
| -----|----------------- |
| | V HL Queue | |
| | | 1 | 2 | 3 |... | |
| ----------------------- |
| | |
| -----|----------------- |
| | V LL Queue | |
| | | 1 | 2 | 3 |... | |
| ----------------------- |
| |
---------------------------------------
Order of execution during an engine step:
First comes physics: gravity, buoyancy, friction etc., then the logic function is called.
After that, the first behavior on the high level queue, if exists,
and the last, the first low level behavior if present.
1.4 Entity definition
---------------------
minetest.register_entity("mod:name",{
-- required minetest api props
physical = true,
collide_with_objects = true,
collisionbox = {...},
visual = "mesh",
mesh = "...",
textures = {...},
-- required mobkit props
timeout = [num], -- entities are removed after this many seconds inactive
-- 0 is never
-- mobs having memory entries are not affected
buoyancy = [num], -- (0,1) - portion of collisionbox submerged
-- = 1 - controlled buoyancy (fish, submarine)
-- > 1 - drowns
-- < 0 - MC like water trampolining
lung_capacity = [num], -- seconds
max_hp = [num],
on_step = mobkit.stepfunc,
on_activate = mobkit.actfunc,
get_staticdata = mobkit.statfunc,
logic = [function user defined], -- older 'brainfunc' name works as well.
-- optional mobkit props
-- or used by built in behaviors
physics = [function user defined] -- optional, overrides built in physics
animation = {
[name]={range={x=[num],y=[num]},speed=[num],loop=[bool]}, -- single
[name]={ -- variant, animations are chosen randomly.
{range={x=[num],y=[num]},speed=[num],loop=[bool]},
{range={x=[num],y=[num]},speed=[num],loop=[bool]},
...
}
...
}
sounds = {
[name] = [string filename], --single, simple,
[name] = { --single, more powerful. All fields but 'name' are optional
name = [string filename],
gain=[num or range], --range is a table of the format {left_bound, right_bound}
fade=[num or range],
pitch=[num or range],
},
[name] = { --variant, sound is chosen randomly
{
name = [string filename],
gain=[num or range],
fade=[num or range],
pitch=[num or range],
},
{
name = [string filename],
gain=[num or range],
fade=[num or range],
pitch=[num or range],
},
...
},
...
},
max_speed = [num], -- m/s
jump_height = [num], -- nodes/meters
view_range = [num], -- nodes/meters
attack={range=[num], -- range is distance between attacker's collision box center
damage_groups={fleshy=[num]}}, -- and the tip of the murder weapon in nodes/meters
armor_groups = {fleshy=[num]}
})
1.5 Exposed luaentity members
Some frequently used entity fields to be accessed directly for convenience
self.dtime -- max(dtime as passed to on_step,0.5) - limit of 0.05 to prevent jerkines on long steps.
self.hp -- hitpoints
self.isonground -- true if pos.y remains unchanged for 2 consecutive steps
self.isinliquid -- true if the node at foot level is drawtype=='liquid'
------------
2. Reference
------------
2.1 Utility Functions
function mobkit.minmax(v,m)
-- v,n: numbers
-- returns v trimmed to <-m,m> range
function mobkit.get_terrain_height(pos,steps)
-- recursively search for walkable surface at pos.
-- steps (optional) is how far from pos it gives up, expressed in nodes, default 3
-- Returns:
-- surface height at pos, or nil if not found
-- liquid flag: true if found surface is covered with liquid
function mobkit.turn2yaw(self,tyaw,rate)
-- gradually turns towards yaw
-- self: luaentity
-- tyaw: target yaw in radians
-- rate: turn rate in rads/s
--returns: true if facing tyaw; current yaw
function mobkit.timer(self,s)
-- returns true approx every s seconds
-- used to reduce execution of code that needn't necessarily be done on every engine step
function mobkit.pos_shift(pos,vec)
-- convenience function
-- returns pos shifted by vec
-- vec needn't have all three components given, absent components are assumed zero.
-- e.g pos_shift(pos,{y=1}) is valid
function mobkit.pos_translate2d(pos,yaw,dist)
-- returns pos translated in the yaw direction by dist
function mobkit.get_stand_pos(thing)
-- returns object pos projected onto the bottom collisionbox face
-- thing can be luaentity or objectref.
function mobkit.nodeatpos(pos)
-- convenience function
-- returns nodedef or nil if it's an ignore node
function mobkit.get_node_pos(pos)
-- returns center of the node that pos is inside
function mobkit.get_nodes_in_area(pos1,pos2,[full])
-- in basic mode returns a table of unique nodes within area indexed by node
-- in full=true mode returns a table of nodes indexed by pos
-- works for up to 125 nodes.
function mobkit.isnear2d(p1,p2,thresh)
-- returns true if pos p2 is within a square with center at pos p1 and radius thresh
-- y components are ignored
function mobkit.is_there_yet2d(pos,dir,dest) -- obj positon; facing vector; destination position
-- returns true if a position dest is behind position pos according to facing vector dir
-- (checks if dest is in the rear half plane as defined by pos and dir)
-- y components are ignored
function mobkit.isnear3d(p1,p2,thresh)
-- returns true if pos p2 is within a cube with center at pos p1 and radius thresh
function mobkit.dir_to_rot(v,rot)
-- converts a 3d vector v to rotation like in set_rotation() object method
-- rot (optional) is current object rotation
function mobkit.rot_to_dir(rot)
-- converts minetest rotation vector (pitch,yaw,roll) to direction unit vector
function mobkit.is_alive(thing)
-- non essential, checks if thing exists in the world and is alive
-- makes an assumption that luaentities are considered dead when their hp < 100
-- thing can be luaentity or objectref.
-- used for stored luaentities and objectrefs
function mobkit.exists(thing)
-- checks if thing exists in the world
-- thing can be luaentity or objectref.
-- used for stored luaentities and objectrefs
function mobkit.hurt(luaent,dmg)
-- decrease luaent.hp by dmg
function mobkit.heal(luaent,dmg)
-- increase luaent.hp by dmg
function mobkit.get_spawn_pos_abr(dtime,intrvl,radius,chance,reduction)
-- returns a potential spawn position at random intervals
-- intrvl: avg spawn attempt interval for every player
-- radius: spawn distance in nodes, active_block_range*16 is recommended
-- chance: (0,1) chance to spawn a mob if there are no other objects in area
-- reduction: (0,1) spawn chance is reduced by this factor for every object in range.
--usage:
minetest.register_globalstep(function(dtime)
local spawnpos = mobkit.get_spawn_pos_abr(...)
if spawnpos then
... -- mod/game specific logic
end
end)
function mobkit.animate(self,anim)
-- makes an entity play an animation of name anim, or does nothing if not defined
-- anim is string, see entity definition
-- does nothing if the same animation is already running
function mobkit.make_sound(self,sound)
-- sound is string, see entity definition
-- makes an entity play sound, or does nothing if not defined
--returns sound handle
function mobkit.go_forward_horizontal(self,speed)
-- sets an entity's horizontal velocity in yaw direction. Vertical velocity unaffected.
function mobkit.drive_to_pos(self,tpos,speed,turn_rate,dist)
-- moves in facing direction while gradually turning towards tpos, returns true if in dist distance from tpos
-- tpos: target position
-- speed: in m/s
-- turn_rate: in rad/s
-- dist: in m.
-- Memory functions.
This represents mob long term memory
Warning: Stuff in memory is serialized, never try to remember objectrefs or tables referencing them
or the engine will crash.
function mobkit.remember(self,key,val)
-- premanently store a key, value pair
function mobkit.forget(self,key)
-- clears a memory entry
function mobkit.recall(self,key)
-- returns val associated with key
-- Queue functions
function mobkit.queue_high(self,func,priority)
-- only for use in behavior definitions, see 1.1.2
function mobkit.queue_low(self,func)
-- only for use in behavior definitions, see 1.1.1
function mobkit.clear_queue_high(self)
function mobkit.clear_queue_low(self)
function mobkit.is_queue_empty_high(self)
function mobkit.is_queue_empty_low(self)
function mobkit.get_queue_priority(self)
-- returns the priority of currently running behavior
-- this is also the highest of all queued behaviors
-- Use these inside logic functions --
function mobkit.vitals(self)
-- default drowning and fall damage, call it before hp check
function mobkit.get_nearby_player(self)
-- returns random player if nearby or nil
function mobkit.get_nearby_entity(self,name)
-- returns random nearby entity of name or nil
function mobkit.get_closest_entity(self,name)
-- returns closest entity of name or nil
-- Misc
Neighbors structure represents a node's horizontal neighbors
Not essential, used by some built in behaviors
Custom behaviors may not need it.
Neighbor #1 is offset {x=1,z=0}, subsequent numbers go clockwise
function mobkit.dir2neighbor(dir)
-- converts a 3d vector to neighbor number, y component ignored
function mobkit.neighbor_shift(neighbor,shift)
-- get another neighbor number relative to the given, shift: plus is clockwise, minus the opposite
-- 1,1 = 2; 1,-2 = 7
2.2 Built in behaviors
function mobkit.goto_next_waypoint(self,tpos)
-- this functions groups common operations making mobs move in a specific direction
-- not a behavior itself, but is used by some built in HL behaviors
-- which use node by node movement algorithm
2.2.1 High Level Behaviors --
function mobkit.hq_roam(self,prty)
-- slow random roaming
-- never returns
function mobkit.hq_follow(self,prty,tgtobj)
-- follow the tgtobj
-- returns if tgtobj becomes inactive
function mobkit.hq_goto(self,prty,tpos)
-- go to tpos position
-- returns on arrival
function mobkit.hq_runfrom(self,prty,tgtobj)
-- run away from tgtobj object
-- returns when tgtobj far enough
function mobkit.hq_hunt(self,prty,tgtobj)
-- follow tgtobj and when close enough, kick off hq_attack
-- returns when tgtobj too far
function mobkit.hq_warn(self,prty,tgtobj)
-- when a tgtobj close by, turn towards them and make the 'warn' sound
-- kick off hq_hunt if tgtobj too close or timer expired
-- returns when tgtobj moves away
function mobkit.hq_die(self)
-- default death, rotate and remove() after set time
function mobkit.hq_attack(self,prty,tgtobj)
-- default attack, turns towards tgtobj and leaps
-- returns when tgtobj out of range
function mobkit.hq_liquid_recovery(self,prty)
-- use when submerged in liquid, scan for nearest land
-- if land is found within view_range, kick off hq_swimto
-- otherwise die
function mobkit.hq_swimto(self,prty,tpos)
-- swim towards the position tpos, jump if necessary
-- returns if standing firmly on dry land
Aquatic behaviors:
Macros:
function aqua_radar_dumb(pos,yaw,range,reverse)
-- assumes a mob will avoid shallows
-- checks if a pos in front of a moving entity swimmable
-- otherwise returns new position
function mobkit.is_in_deep(target)
-- checks if an object is in water at least 2 nodes deep
Hq Behaviors:
function mobkit.hq_aqua_roam(self,prty,speed)
function mobkit.hq_aqua_attack(self,prty,tgtobj,speed)
function mobkit.hq_aqua_turn(self,prty,tyaw,speed)
-- used by both previous bhv
2.2.2 Low Level Behaviors --
function mobkit.lq_turn2pos(self,tpos)
-- gradually turn towards tpos position
-- returns when facing tpos
function mobkit.lq_idle(self,duration)
-- do nothing for duration seconds
-- set 'stand' animation
function mobkit.lq_dumbwalk(self,dest,speed_factor)
-- simply move towards dest
-- set 'walk' animation
function mobkit.lq_dumbjump(self,height)
-- if standing on the ground, jump in the facing direction
-- height is relative to feet level
-- set 'stand' animation
function mobkit.lq_freejump(self)
-- unconditional jump in the facing direction
-- useful e.g for getting out of water
-- returns when the apex has been reached
function mobkit.lq_jumpattack(self,height,target)
-- jump towards the target, punch if a hit
-- returns after punch or on the ground
function mobkit.lq_fallover(self)
-- gradually rotates Z = 0 to pi/2
2.3 Constants and member variables --
mobkit.gravity = -9.8
mobkit.friction = 0.4 -- inert entities will slow down when in contact with the ground
-- the smaller the number, the greater the effect
self.dtime -- for convenience, dtime as passed to currently executing on_step()
self.isonground -- true if y velocity is 0 for at least two succesive steps
self.isinliquid -- true if feet submerged in liquid type=source

View File

@ -1,2 +0,0 @@
name = mobkit
description = Entity API

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

1
mods/mobs_animal Submodule

@ -0,0 +1 @@
Subproject commit 3768da8e492a1cb10de568617ed382cd8372930c

View File

@ -1,202 +0,0 @@
local S = mobs.intllib
-- Bee by KrupnoPavel (.b3d model by sirrobzeroone)
mobs:register_mob("mobs_animal:bee", {
type = "animal",
passive = true,
hp_min = 1,
hp_max = 2,
armor = 200,
collisionbox = {-0.2, -0.01, -0.2, 0.2, 0.5, 0.2},
visual = "mesh",
mesh = "mobs_bee.b3d",
textures = {
{"mobs_bee.png"},
},
blood_texture = "mobs_bee_inv.png",
blood_amount = 1,
makes_footstep_sound = false,
sounds = {
random = "mobs_bee",
},
walk_velocity = 1,
jump = true,
drops = {
{name = "mobs:honey", chance = 2, min = 1, max = 2},
},
water_damage = 1,
lava_damage = 2,
light_damage = 0,
fall_damage = 0,
fall_speed = -3,
animation = {
speed_normal = 15,
stand_start = 0,
stand_end = 30,
walk_start = 35,
walk_end = 65,
},
on_rightclick = function(self, clicker)
mobs:capture_mob(self, clicker, 50, 90, 0, true, "mobs_animal:bee")
end,
-- after_activate = function(self, staticdata, def, dtime)
-- print ("------", self.name, dtime, self.health)
-- end,
})
mobs:spawn({
name = "mobs_animal:bee",
nodes = {"group:flower"},
min_light = 14,
interval = 60,
chance = 7000,
min_height = 3,
max_height = 200,
day_toggle = true,
})
mobs:register_egg("mobs_animal:bee", S("Bee"), "mobs_bee_inv.png")
-- compatibility
mobs:alias_mob("mobs:bee", "mobs_animal:bee")
-- honey
minetest.register_craftitem(":mobs:honey", {
description = S("Honey"),
inventory_image = "mobs_honey_inv.png",
on_use = minetest.item_eat(4),
groups = {food_honey = 1, food_sugar = 1, flammable = 1},
})
-- beehive (when placed spawns bee)
minetest.register_node(":mobs:beehive", {
description = S("Beehive"),
drawtype = "plantlike",
tiles = {"mobs_beehive.png"},
inventory_image = "mobs_beehive.png",
paramtype = "light",
sunlight_propagates = true,
walkable = true,
groups = {oddly_breakable_by_hand = 3, flammable = 1, disable_suffocation = 1},
sounds = default.node_sound_defaults(),
on_construct = function(pos)
local meta = minetest.get_meta(pos)
meta:set_string("formspec", "size[8,6]"
..default.gui_bg..default.gui_bg_img..default.gui_slots
.. "image[3,0.8;0.8,0.8;mobs_bee_inv.png]"
.. "list[current_name;beehive;4,0.5;1,1;]"
.. "list[current_player;main;0,2.35;8,4;]"
.. "listring[]")
meta:get_inventory():set_size("beehive", 1)
end,
after_place_node = function(pos, placer, itemstack)
if placer and placer:is_player() then
minetest.set_node(pos, {name = "mobs:beehive", param2 = 1})
if math.random(1, 4) == 1 then
minetest.add_entity(pos, "mobs_animal:bee")
end
end
end,
on_punch = function(pos, node, puncher)
-- yep, bee's don't like having their home punched by players
puncher:set_hp(puncher:get_hp() - 4)
end,
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
if listname == "beehive" then
return 0
end
return stack:get_count()
end,
can_dig = function(pos,player)
local meta = minetest.get_meta(pos)
-- only dig beehive if no honey inside
return meta:get_inventory():is_empty("beehive")
end,
})
minetest.register_craft({
output = "mobs:beehive",
recipe = {
{"mobs:bee","mobs:bee","mobs:bee"},
}
})
-- honey block
minetest.register_node(":mobs:honey_block", {
description = S("Honey Block"),
tiles = {"mobs_honey_block.png"},
groups = {snappy = 3, flammable = 2},
sounds = default.node_sound_dirt_defaults(),
})
minetest.register_craft({
output = "mobs:honey_block",
recipe = {
{"mobs:honey", "mobs:honey", "mobs:honey"},
{"mobs:honey", "mobs:honey", "mobs:honey"},
{"mobs:honey", "mobs:honey", "mobs:honey"},
}
})
minetest.register_craft({
output = "mobs:honey 9",
recipe = {
{"mobs:honey_block"},
}
})
-- beehive workings
minetest.register_abm({
nodenames = {"mobs:beehive"},
interval = 12,
chance = 6,
catch_up = false,
action = function(pos, node)
-- bee's only make honey during the day
local tod = (minetest.get_timeofday() or 0) * 24000
if tod < 5500 or tod > 18500 then
return
end
-- is hive full?
local meta = minetest.get_meta(pos)
if not meta then return end -- for older beehives
local inv = meta:get_inventory()
local honey = inv:get_stack("beehive", 1):get_count()
-- is hive full?
if honey > 11 then
return
end
-- no flowers no honey, nuff said!
if #minetest.find_nodes_in_area_under_air(
{x = pos.x - 4, y = pos.y - 3, z = pos.z - 4},
{x = pos.x + 4, y = pos.y + 3, z = pos.z + 4},
"group:flower") > 3 then
inv:add_item("beehive", "mobs:honey")
end
end
})

View File

@ -1,178 +0,0 @@
local S = mobs.intllib
-- Bunny by ExeterDad
mobs:register_mob("mobs_animal:bunny", {
stepheight = 0.6,
type = "animal",
passive = true,
reach = 1,
hp_min = 1,
hp_max = 4,
armor = 200,
collisionbox = {-0.268, -0.5, -0.268, 0.268, 0.167, 0.268},
visual = "mesh",
mesh = "mobs_bunny.b3d",
drawtype = "front",
textures = {
{"mobs_bunny_grey.png"},
{"mobs_bunny_brown.png"},
{"mobs_bunny_white.png"},
},
sounds = {},
makes_footstep_sound = false,
walk_velocity = 1,
run_velocity = 2,
runaway = true,
runaway_from = {"mobs_animal:pumba", "player"},
jump = true,
jump_height = 6,
drops = {
{name = "mobs:rabbit_raw", chance = 1, min = 1, max = 1},
{name = "mobs:rabbit_hide", chance = 1, min = 0, max = 1},
},
water_damage = 0,
lava_damage = 4,
light_damage = 0,
fear_height = 2,
animation = {
speed_normal = 15,
stand_start = 1,
stand_end = 15,
walk_start = 16,
walk_end = 24,
punch_start = 16,
punch_end = 24,
},
follow = {"farming:carrot", "farming_plus:carrot_item", "default:grass_1"},
view_range = 8,
replace_rate = 10,
replace_what = {"farming:carrot_7", "farming:carrot_8", "farming_plus:carrot"},
replace_with = "air",
on_rightclick = function(self, clicker)
-- feed or tame
if mobs:feed_tame(self, clicker, 4, true, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 30, 50, 80, false, nil) then return end
-- Monty Python tribute
local item = clicker:get_wielded_item()
if item:get_name() == "mobs:lava_orb" then
if not mobs.is_creative(clicker:get_player_name()) then
item:take_item()
clicker:set_wielded_item(item)
end
self.object:set_properties({
textures = {"mobs_bunny_evil.png"},
})
self.type = "monster"
self.health = 20
self.passive = false
return
end
end,
on_spawn = function(self)
local pos = self.object:get_pos() ; pos.y = pos.y - 1
-- white snowy bunny
if minetest.find_node_near(pos, 1,
{"default:snow", "default:snowblock", "default:dirt_with_snow"}) then
self.base_texture = {"mobs_bunny_white.png"}
self.object:set_properties({textures = self.base_texture})
-- brown desert bunny
elseif minetest.find_node_near(pos, 1,
{"default:desert_sand", "default:desert_stone"}) then
self.base_texture = {"mobs_bunny_brown.png"}
self.object:set_properties({textures = self.base_texture})
-- grey stone bunny
elseif minetest.find_node_near(pos, 1,
{"default:stone", "default:gravel"}) then
self.base_texture = {"mobs_bunny_grey.png"}
self.object:set_properties({textures = self.base_texture})
end
return true -- run only once, false/nil runs every activation
end,
attack_type = "dogfight",
damage = 5,
})
local spawn_on = "default:dirt_with_grass"
if minetest.get_modpath("ethereal") then
spawn_on = "ethereal:prairie_dirt"
end
mobs:spawn({
name = "mobs_animal:bunny",
nodes = {spawn_on},
neighbors = {"group:grass"},
min_light = 14,
interval = 60,
chance = 8000, -- 15000
min_height = 5,
max_height = 200,
day_toggle = true,
})
mobs:register_egg("mobs_animal:bunny", S("Bunny"), "mobs_bunny_inv.png", 0)
mobs:alias_mob("mobs:bunny", "mobs_animal:bunny") -- compatibility
-- raw rabbit
minetest.register_craftitem(":mobs:rabbit_raw", {
description = S("Raw Rabbit"),
inventory_image = "mobs_rabbit_raw.png",
on_use = minetest.item_eat(3),
groups = {food_meat_raw = 1, food_rabbit_raw = 1, flammable = 2},
})
-- cooked rabbit
minetest.register_craftitem(":mobs:rabbit_cooked", {
description = S("Cooked Rabbit"),
inventory_image = "mobs_rabbit_cooked.png",
on_use = minetest.item_eat(5),
groups = {food_meat = 1, food_rabbit = 1, flammable = 2},
})
minetest.register_craft({
type = "cooking",
output = "mobs:rabbit_cooked",
recipe = "mobs:rabbit_raw",
cooktime = 5,
})
-- rabbit hide
minetest.register_craftitem(":mobs:rabbit_hide", {
description = S("Rabbit Hide"),
inventory_image = "mobs_rabbit_hide.png",
groups = {flammable = 2},
})
minetest.register_craft({
type = "fuel",
recipe = "mobs:rabbit_hide",
burntime = 2,
})
minetest.register_craft({
output = "mobs:leather",
type = "shapeless",
recipe = {
"mobs:rabbit_hide", "mobs:rabbit_hide",
"mobs:rabbit_hide", "mobs:rabbit_hide"
}
})

View File

@ -1,306 +0,0 @@
local S = mobs.intllib
-- Chicken by JK Murray and Sirrobzeroone
mobs:register_mob("mobs_animal:chicken", {
stepheight = 0.6,
type = "animal",
passive = true,
hp_min = 5,
hp_max = 10,
armor = 200,
collisionbox = {-0.3, -0.75, -0.3, 0.3, 0.1, 0.3},
visual = "mesh",
mesh = "mobs_chicken.b3d",
textures = {
{"mobs_chicken.png"}, -- white
{"mobs_chicken_brown.png"},
{"mobs_chicken_black.png"},
},
child_texture = {
{"mobs_chick.png"},
},
makes_footstep_sound = true,
sounds = {
random = "mobs_chicken",
},
walk_velocity = 1,
run_velocity = 3,
runaway = true,
runaway_from = {"player", "mobs_animal:pumba"},
drops = {
{name = "mobs:chicken_raw", chance = 1, min = 1, max = 1},
{name = "mobs:chicken_feather", chance = 1, min = 0, max = 2},
},
water_damage = 1,
lava_damage = 5,
light_damage = 0,
fall_damage = 0,
fall_speed = -4,
fear_height = 5,
animation = {
speed_normal = 15,
stand_start = 1,
stand_end = 30,
stand_speed = 28,
stand1_start = 31,
stand1_end = 70,
stand1_speed = 32,
walk_start = 71,
walk_end = 90,
walk_speed = 24,
run_start = 91,
run_end = 110,
run_speed = 24,
},
follow = {"farming:seed_wheat", "farming:seed_cotton"},
view_range = 5,
on_rightclick = function(self, clicker)
if mobs:feed_tame(self, clicker, 8, true, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 30, 50, 80, false, nil) then return end
end,
do_custom = function(self, dtime)
self.egg_timer = (self.egg_timer or 0) + dtime
if self.egg_timer < 10 then
return
end
self.egg_timer = 0
if self.child
or math.random(1, 100) > 1 then
return
end
local pos = self.object:get_pos()
minetest.add_item(pos, "mobs:egg")
minetest.sound_play("default_place_node_hard", {
pos = pos,
gain = 1.0,
max_hear_distance = 5,
})
end,
})
local spawn_on = {"default:dirt_with_grass"}
if minetest.get_modpath("ethereal") then
spawn_on = {"ethereal:bamboo_dirt", "ethereal:prairie_dirt"}
end
mobs:spawn({
name = "mobs_animal:chicken",
nodes = spawn_on,
neighbors = {"group:grass"},
min_light = 14,
interval = 60,
chance = 8000, -- 15000
min_height = 5,
max_height = 200,
day_toggle = true,
})
mobs:register_egg("mobs_animal:chicken", S("Chicken"), "mobs_chicken_inv.png", 0)
mobs:alias_mob("mobs:chicken", "mobs_animal:chicken") -- compatibility
-- egg entity
mobs:register_arrow("mobs_animal:egg_entity", {
visual = "sprite",
visual_size = {x=.5, y=.5},
textures = {"mobs_chicken_egg.png"},
velocity = 6,
hit_player = function(self, player)
player:punch(minetest.get_player_by_name(self.playername) or self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups = {fleshy = 1},
}, nil)
end,
hit_mob = function(self, player)
player:punch(minetest.get_player_by_name(self.playername) or self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups = {fleshy = 1},
}, nil)
end,
hit_node = function(self, pos, node)
if math.random(1, 10) > 1 then
return
end
pos.y = pos.y + 1
local nod = minetest.get_node_or_nil(pos)
if not nod
or not minetest.registered_nodes[nod.name]
or minetest.registered_nodes[nod.name].walkable == true then
return
end
local mob = minetest.add_entity(pos, "mobs_animal:chicken")
local ent2 = mob:get_luaentity()
mob:set_properties({
textures = ent2.child_texture[1],
visual_size = {
x = ent2.base_size.x / 2,
y = ent2.base_size.y / 2
},
collisionbox = {
ent2.base_colbox[1] / 2,
ent2.base_colbox[2] / 2,
ent2.base_colbox[3] / 2,
ent2.base_colbox[4] / 2,
ent2.base_colbox[5] / 2,
ent2.base_colbox[6] / 2
},
})
ent2.child = true
ent2.tamed = true
ent2.owner = self.playername
end
})
-- egg throwing item
local egg_GRAVITY = 9
local egg_VELOCITY = 19
-- shoot egg
local mobs_shoot_egg = function (item, player, pointed_thing)
local playerpos = player:get_pos()
minetest.sound_play("default_place_node_hard", {
pos = playerpos,
gain = 1.0,
max_hear_distance = 5,
})
local obj = minetest.add_entity({
x = playerpos.x,
y = playerpos.y +1.5,
z = playerpos.z
}, "mobs_animal:egg_entity")
local ent = obj:get_luaentity()
local dir = player:get_look_dir()
ent.velocity = egg_VELOCITY -- needed for api internal timing
ent.switch = 1 -- needed so that egg doesn't despawn straight away
obj:setvelocity({
x = dir.x * egg_VELOCITY,
y = dir.y * egg_VELOCITY,
z = dir.z * egg_VELOCITY
})
obj:setacceleration({
x = dir.x * -3,
y = -egg_GRAVITY,
z = dir.z * -3
})
-- pass player name to egg for chick ownership
local ent2 = obj:get_luaentity()
ent2.playername = player:get_player_name()
item:take_item()
return item
end
-- egg
minetest.register_node(":mobs:egg", {
description = S("Chicken Egg"),
tiles = {"mobs_chicken_egg.png"},
inventory_image = "mobs_chicken_egg.png",
visual_scale = 0.7,
drawtype = "plantlike",
wield_image = "mobs_chicken_egg.png",
paramtype = "light",
walkable = false,
is_ground_content = true,
sunlight_propagates = true,
selection_box = {
type = "fixed",
fixed = {-0.2, -0.5, -0.2, 0.2, 0, 0.2}
},
groups = {food_egg = 1, snappy = 2, dig_immediate = 3},
after_place_node = function(pos, placer, itemstack)
if placer:is_player() then
minetest.set_node(pos, {name = "mobs:egg", param2 = 1})
end
end,
on_use = mobs_shoot_egg
})
-- fried egg
minetest.register_craftitem(":mobs:chicken_egg_fried", {
description = S("Fried Egg"),
inventory_image = "mobs_chicken_egg_fried.png",
on_use = minetest.item_eat(2),
groups = {food_egg_fried = 1, flammable = 2},
})
minetest.register_craft({
type = "cooking",
recipe = "mobs:egg",
output = "mobs:chicken_egg_fried",
})
-- raw chicken
minetest.register_craftitem(":mobs:chicken_raw", {
description = S("Raw Chicken"),
inventory_image = "mobs_chicken_raw.png",
on_use = minetest.item_eat(2),
groups = {food_meat_raw = 1, food_chicken_raw = 1, flammable = 2},
})
-- cooked chicken
minetest.register_craftitem(":mobs:chicken_cooked", {
description = S("Cooked Chicken"),
inventory_image = "mobs_chicken_cooked.png",
on_use = minetest.item_eat(6),
groups = {food_meat = 1, food_chicken = 1, flammable = 2},
})
minetest.register_craft({
type = "cooking",
recipe = "mobs:chicken_raw",
output = "mobs:chicken_cooked",
})
-- feather
minetest.register_craftitem(":mobs:chicken_feather", {
description = S("Feather"),
inventory_image = "mobs_chicken_feather.png",
groups = {flammable = 2},
})
minetest.register_craft({
type = "fuel",
recipe = "mobs:chicken_feather",
burntime = 1,
})

View File

@ -1,257 +0,0 @@
local S = mobs.intllib
-- Cow by sirrobzeroone
mobs:register_mob("mobs_animal:cow", {
type = "animal",
passive = false,
attack_type = "dogfight",
attack_npcs = false,
reach = 2,
damage = 4,
hp_min = 5,
hp_max = 20,
armor = 200,
collisionbox = {-0.4, -0.01, -0.4, 0.4, 1.2, 0.4},
visual = "mesh",
mesh = "mobs_cow.b3d",
textures = {
{"mobs_cow.png"},
{"mobs_cow2.png"},
},
makes_footstep_sound = true,
sounds = {
random = "mobs_cow",
},
walk_velocity = 1,
run_velocity = 2,
jump = true,
jump_height = 6,
pushable = true,
drops = {
{name = "mobs:meat_raw", chance = 1, min = 1, max = 3},
{name = "mobs:leather", chance = 1, min = 0, max = 2},
},
water_damage = 0,
lava_damage = 5,
light_damage = 0,
animation = {
stand_start = 0,
stand_end = 30,
stand_speed = 20,
stand1_start = 35,
stand1_end = 75,
stand1_speed = 20,
walk_start = 85,
walk_end = 114,
walk_speed = 20,
run_start = 120,
run_end = 140,
run_speed = 30,
punch_start = 145,
punch_end = 160,
punch_speed = 20,
die_start = 165,
die_end = 185,
die_speed = 10,
die_loop = false,
},
follow = {"farming:wheat", "default:grass_1"},
view_range = 8,
replace_rate = 10,
replace_what = {
{"group:grass", "air", 0},
{"default:dirt_with_grass", "default:dirt", -1}
},
-- stay_near = {{"farming:straw", "group:grass"}, 10},
fear_height = 2,
on_rightclick = function(self, clicker)
-- feed or tame
if mobs:feed_tame(self, clicker, 8, true, true) then
-- if fed 7x wheat or grass then cow can be milked again
if self.food and self.food > 6 then
self.gotten = false
end
return
end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 0, 5, 60, false, nil) then return end
local tool = clicker:get_wielded_item()
local name = clicker:get_player_name()
-- milk cow with empty bucket
if tool:get_name() == "bucket:bucket_empty" then
--if self.gotten == true
if self.child == true then
return
end
if self.gotten == true then
minetest.chat_send_player(name,
S("Cow already milked!"))
return
end
local inv = clicker:get_inventory()
tool:take_item()
clicker:set_wielded_item(tool)
if inv:room_for_item("main", {name = "mobs:bucket_milk"}) then
clicker:get_inventory():add_item("main", "mobs:bucket_milk")
else
local pos = self.object:get_pos()
pos.y = pos.y + 0.5
minetest.add_item(pos, {name = "mobs:bucket_milk"})
end
self.gotten = true -- milked
return
end
end,
on_replace = function(self, pos, oldnode, newnode)
self.food = (self.food or 0) + 1
-- if cow replaces 8x grass then it can be milked again
if self.food >= 8 then
self.food = 0
self.gotten = false
end
end,
})
mobs:spawn({
name = "mobs_animal:cow",
nodes = {"default:dirt_with_grass", "ethereal:green_dirt"},
neighbors = {"group:grass"},
min_light = 14,
interval = 60,
chance = 8000, -- 15000
min_height = 5,
max_height = 200,
day_toggle = true,
})
mobs:register_egg("mobs_animal:cow", S("Cow"), "mobs_cow_inv.png")
mobs:alias_mob("mobs:cow", "mobs_animal:cow") -- compatibility
-- bucket of milk
minetest.register_craftitem(":mobs:bucket_milk", {
description = S("Bucket of Milk"),
inventory_image = "mobs_bucket_milk.png",
stack_max = 1,
on_use = minetest.item_eat(8, "bucket:bucket_empty"),
groups = {food_milk = 1, flammable = 3, drink = 1},
})
-- glass of milk
minetest.register_craftitem(":mobs:glass_milk", {
description = S("Glass of Milk"),
inventory_image = "mobs_glass_milk.png",
on_use = minetest.item_eat(2, "vessels:drinking_glass"),
groups = {food_milk_glass = 1, flammable = 3, vessel = 1, drink = 1},
})
minetest.register_craft({
type = "shapeless",
output = "mobs:glass_milk 4",
recipe = {
"vessels:drinking_glass", "vessels:drinking_glass",
"vessels:drinking_glass", "vessels:drinking_glass",
"mobs:bucket_milk"
},
replacements = { {"mobs:bucket_milk", "bucket:bucket_empty"} }
})
minetest.register_craft({
type = "shapeless",
output = "mobs:bucket_milk",
recipe = {
"mobs:glass_milk", "mobs:glass_milk",
"mobs:glass_milk", "mobs:glass_milk",
"bucket:bucket_empty"
},
replacements = { {"mobs:glass_milk", "vessels:drinking_glass 4"} }
})
-- butter
minetest.register_craftitem(":mobs:butter", {
description = S("Butter"),
inventory_image = "mobs_butter.png",
on_use = minetest.item_eat(1),
groups = {food_butter = 1, flammable = 2},
})
if minetest.get_modpath("farming") and farming and farming.mod then
minetest.register_craft({
type = "shapeless",
output = "mobs:butter",
recipe = {"mobs:bucket_milk", "farming:salt"},
replacements = {{ "mobs:bucket_milk", "bucket:bucket_empty"}}
})
else -- some saplings are high in sodium so makes a good replacement item
minetest.register_craft({
type = "shapeless",
output = "mobs:butter",
recipe = {"mobs:bucket_milk", "default:sapling"},
replacements = {{ "mobs:bucket_milk", "bucket:bucket_empty"}}
})
end
-- cheese wedge
minetest.register_craftitem(":mobs:cheese", {
description = S("Cheese"),
inventory_image = "mobs_cheese.png",
on_use = minetest.item_eat(4),
groups = {food_cheese = 1, flammable = 2},
})
minetest.register_craft({
type = "cooking",
output = "mobs:cheese",
recipe = "mobs:bucket_milk",
cooktime = 5,
replacements = {{ "mobs:bucket_milk", "bucket:bucket_empty"}}
})
-- cheese block
minetest.register_node(":mobs:cheeseblock", {
description = S("Cheese Block"),
tiles = {"mobs_cheeseblock.png"},
is_ground_content = false,
groups = {crumbly = 3},
sounds = default.node_sound_dirt_defaults()
})
minetest.register_craft({
output = "mobs:cheeseblock",
recipe = {
{"mobs:cheese", "mobs:cheese", "mobs:cheese"},
{"mobs:cheese", "mobs:cheese", "mobs:cheese"},
{"mobs:cheese", "mobs:cheese", "mobs:cheese"},
}
})
minetest.register_craft({
output = "mobs:cheese 9",
recipe = {
{"mobs:cheeseblock"},
}
})

View File

@ -1,4 +0,0 @@
default
mobs
intllib?
lucky_block?

View File

@ -1 +0,0 @@
Adds farm animals.

View File

@ -1,24 +0,0 @@
local path = minetest.get_modpath("mobs_animal")
-- Load support for intllib.
local MP = minetest.get_modpath(minetest.get_current_modname())
local S, NS = dofile(MP.."/intllib.lua")
mobs.intllib = S
-- Animals
dofile(path .. "/chicken.lua") -- JKmurray
dofile(path .. "/cow.lua") -- KrupnoPavel
dofile(path .. "/rat.lua") -- PilzAdam
dofile(path .. "/sheep.lua") -- PilzAdam
dofile(path .. "/warthog.lua") -- KrupnoPavel
dofile(path .. "/bee.lua") -- KrupnoPavel
dofile(path .. "/bunny.lua") -- ExeterDad
dofile(path .. "/kitten.lua") -- Jordach/BFD
dofile(path .. "/penguin.lua") -- D00Med
dofile(path .. "/panda.lua") -- AspireMint
dofile(path .. "/lucky_block.lua")
print (S("[MOD] Mobs Redo Animals loaded"))

View File

@ -1,45 +0,0 @@
-- Fallback functions for when `intllib` is not installed.
-- Code released under Unlicense <http://unlicense.org>.
-- Get the latest version of this file at:
-- https://raw.githubusercontent.com/minetest-mods/intllib/master/lib/intllib.lua
local function format(str, ...)
local args = { ... }
local function repl(escape, open, num, close)
if escape == "" then
local replacement = tostring(args[tonumber(num)])
if open == "" then
replacement = replacement..close
end
return replacement
else
return "@"..open..num..close
end
end
return (str:gsub("(@?)@(%(?)(%d+)(%)?)", repl))
end
local gettext, ngettext
if minetest.get_modpath("intllib") then
if intllib.make_gettext_pair then
-- New method using gettext.
gettext, ngettext = intllib.make_gettext_pair()
else
-- Old method using text files.
gettext = intllib.Getter()
end
end
-- Fill in missing functions.
gettext = gettext or function(msgid, ...)
return format(msgid, ...)
end
ngettext = ngettext or function(msgid, msgid_plural, n, ...)
return format(n==1 and msgid or msgid_plural, ...)
end
return gettext, ngettext

View File

@ -1,168 +0,0 @@
local S = mobs.intllib
local hairball = minetest.settings:get("mobs_hairball")
-- Kitten by Jordach / BFD
mobs:register_mob("mobs_animal:kitten", {
stepheight = 0.6,
type = "animal",
specific_attack = {"mobs_animal:rat"},
damage = 1,
attack_type = "dogfight",
attack_animals = true, -- so it can attack rat
attack_players = false,
reach = 1,
stepheight = 1.1,
passive = false,
hp_min = 5,
hp_max = 10,
armor = 200,
collisionbox = {-0.3, -0.3, -0.3, 0.3, 0.1, 0.3},
visual = "mesh",
visual_size = {x = 0.5, y = 0.5},
mesh = "mobs_kitten.b3d",
textures = {
{"mobs_kitten_striped.png"},
{"mobs_kitten_splotchy.png"},
{"mobs_kitten_ginger.png"},
{"mobs_kitten_sandy.png"},
},
makes_footstep_sound = false,
sounds = {
random = "mobs_kitten",
},
walk_velocity = 0.6,
walk_chance = 15,
run_velocity = 2,
runaway = true,
jump = false,
drops = {
{name = "farming:string", chance = 1, min = 0, max = 1},
},
water_damage = 0,
lava_damage = 5,
fear_height = 3,
animation = {
speed_normal = 42,
stand_start = 97,
stand_end = 192,
walk_start = 0,
walk_end = 96,
stoodup_start = 0,
stoodup_end = 0,
},
follow = {"mobs_animal:rat", "ethereal:fish_raw", "mobs_fish:clownfish", "mobs_fish:tropical"},
view_range = 8,
on_rightclick = function(self, clicker)
if mobs:feed_tame(self, clicker, 4, true, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 50, 50, 90, false, nil) then return end
-- by right-clicking owner can switch between staying and walking
if self.owner and self.owner == clicker:get_player_name() then
if self.order ~= "stand" then
self.order = "stand"
self.state = "stand"
self.object:set_velocity({x = 0, y = 0, z = 0})
mobs:set_animation(self, "stand")
else
self.order = ""
mobs:set_animation(self, "stoodup")
end
end
end,
do_custom = function(self, dtime)
if hairball == "false" then
return
end
self.hairball_timer = (self.hairball_timer or 0) + dtime
if self.hairball_timer < 10 then
return
end
self.hairball_timer = 0
if self.child
or math.random(1, 250) > 1 then
return
end
local pos = self.object:get_pos()
minetest.add_item(pos, "mobs:hairball")
minetest.sound_play("default_dig_snappy", {
pos = pos,
gain = 1.0,
max_hear_distance = 5,
})
end,
})
local spawn_on = "default:dirt_with_grass"
if minetest.get_modpath("ethereal") then
spawn_on = "ethereal:grove_dirt"
end
mobs:spawn({
name = "mobs_animal:kitten",
nodes = {spawn_on},
neighbors = {"group:grass"},
min_light = 14,
interval = 60,
chance = 10000, -- 22000
min_height = 5,
max_height = 50,
day_toggle = true,
})
mobs:register_egg("mobs_animal:kitten", S("Kitten"), "mobs_kitten_inv.png", 0)
mobs:alias_mob("mobs:kitten", "mobs_animal:kitten") -- compatibility
local hairball_items = {
"default:stick", "default:coal_lump", "default:dry_shrub", "flowers:rose",
"mobs_animal:rat", "default:grass_1", "farming:seed_wheat", "dye:green", "",
"farming:seed_cotton", "default:flint", "default:sapling", "dye:white", "",
"default:clay_lump", "default:paper", "default:dry_grass_1", "dye:red", "",
"farming:string", "mobs:chicken_feather", "default:acacia_bush_sapling", "",
"default:bush_sapling", "default:copper_lump", "default:iron_lump", "",
"dye:black", "dye:brown", "default:obsidian_shard", "default:tin_lump"
}
minetest.register_craftitem(":mobs:hairball", {
description = S("Hairball"),
inventory_image = "mobs_hairball.png",
on_use = function(itemstack, user, pointed_thing)
local pos = user:get_pos()
local dir = user:get_look_dir()
local newpos = {x = pos.x + dir.x, y = pos.y + dir.y + 1.5, z = pos.z + dir.z}
local item = hairball_items[math.random(1, #hairball_items)]
if item ~= "" then
minetest.add_item(newpos, {name = item})
end
minetest.sound_play("default_place_node_hard", {
pos = newpos,
gain = 1.0,
max_hear_distance = 5,
})
itemstack:take_item()
return itemstack
end,
})

View File

@ -1,29 +0,0 @@
The MIT License (MIT)
Copyright (c) 2014 Krupnov Pavel and 2016 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.
Chicken sounds from freesounds.org under CC0
Mutton, Pork and Rabbit meat textures by Piezo_ under CC0
Cow textures by sirrobzeroone under CC0
mobs_panda_viking.png by Zlo under CC0

View File

@ -1,203 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-31 11:28+0200\n"
"PO-Revision-Date: 2016-06-10 08:58+0200\n"
"Last-Translator: Xanthin\n"
"Language-Team: \n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.8.12\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: bee.lua
msgid "Bee"
msgstr "Biene"
#: bee.lua
msgid "Honey"
msgstr "Honig"
#: bee.lua
msgid "Beehive"
msgstr "Bienenstock"
#: bee.lua
msgid "Honey Block"
msgstr "Honigblock"
#: bunny.lua
msgid "Bunny"
msgstr "Häschen"
#: bunny.lua
msgid "Raw Rabbit"
msgstr "Rohes Kaninchen"
#: bunny.lua
msgid "Cooked Rabbit"
msgstr "Gekochtes Kaninchen"
#: bunny.lua
msgid "Rabbit Hide"
msgstr "Kaninchenfell"
#: chicken.lua
msgid "Chicken"
msgstr "Huhn"
#: chicken.lua
msgid "Chicken Egg"
msgstr "Hühnerei"
#: chicken.lua
msgid "Fried Egg"
msgstr "Spiegelei"
#: chicken.lua
msgid "Raw Chicken"
msgstr "Rohes Hühnchen"
#: chicken.lua
msgid "Cooked Chicken"
msgstr "Gekochtes Hühnchen"
#: chicken.lua
#, fuzzy
msgid "Feather"
msgstr "Feder"
#: cow.lua
msgid "Cow already milked!"
msgstr "Kuh ist bereits gemolken!"
#: cow.lua
msgid "Cow"
msgstr "Kuh"
#: cow.lua
msgid "Bucket of Milk"
msgstr "Eimer Milch"
#: cow.lua
msgid "Cheese"
msgstr "Käse"
#: cow.lua
msgid "Cheese Block"
msgstr "Käseblock"
#: init.lua
msgid "[MOD] Mobs Redo 'Animals' loaded"
msgstr "[MOD] Mobs Redo 'Animals' geladen"
#: kitten.lua
msgid "Kitten"
msgstr "Kätzchen"
#: penguin.lua
#, fuzzy
msgid "Penguin"
msgstr "Pinguin"
#: rat.lua
msgid "Rat"
msgstr "Ratte"
#: rat.lua
msgid "Cooked Rat"
msgstr "Gekochte Ratte"
#: sheep.lua
msgid "Black"
msgstr "Schwarzes"
#: sheep.lua
msgid "Blue"
msgstr "Blaues"
#: sheep.lua
msgid "Brown"
msgstr "Braunes"
#: sheep.lua
msgid "Cyan"
msgstr "Cyan"
#: sheep.lua
msgid "Dark Green"
msgstr "Dunkelgrünes"
#: sheep.lua
msgid "Dark Grey"
msgstr "Dunkelgraues"
#: sheep.lua
msgid "Green"
msgstr "Grünes"
#: sheep.lua
msgid "Grey"
msgstr "Graues"
#: sheep.lua
msgid "Magenta"
msgstr "Magenta"
#: sheep.lua
msgid "Orange"
msgstr "Oranges"
#: sheep.lua
msgid "Pink"
msgstr "Pinkes"
#: sheep.lua
msgid "Red"
msgstr "Rotes"
#: sheep.lua
msgid "Violet"
msgstr "Violettes"
#: sheep.lua
msgid "White"
msgstr "Weißes"
#: sheep.lua
msgid "Yellow"
msgstr "Gelbes"
#: sheep.lua
#, fuzzy
msgid "@1 Sheep"
msgstr "@1 Schaf"
#: sheep.lua
msgid "Raw Mutton"
msgstr "Rohes Hammelfleisch"
#: sheep.lua
#, fuzzy
msgid "Cooked Mutton"
msgstr "Gekochtes Hammelfleisch"
#: warthog.lua
msgid "Warthog"
msgstr "Warzenschwein"
#: warthog.lua
msgid "Raw Porkchop"
msgstr "Rohes Schweinekotelett"
#: warthog.lua
msgid "Cooked Porkchop"
msgstr "Gekochtes Schweinekotelett"

View File

@ -1,202 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-31 11:28+0200\n"
"PO-Revision-Date: 2017-07-31 09:18+0200\n"
"Last-Translator: fat115 <fat115@framasoft.org>\n"
"Language-Team: \n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.8.12\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: bee.lua
msgid "Bee"
msgstr "Abeille"
#: bee.lua
msgid "Honey"
msgstr "Miel"
#: bee.lua
msgid "Beehive"
msgstr "Ruche"
#: bee.lua
msgid "Honey Block"
msgstr "Bloc de miel"
#: bunny.lua
msgid "Bunny"
msgstr "Lapin"
#: bunny.lua
msgid "Raw Rabbit"
msgstr "Lapin Cru"
#: bunny.lua
#, fuzzy
msgid "Cooked Rabbit"
msgstr "Lapin Cuit"
#: bunny.lua
msgid "Rabbit Hide"
msgstr "Fourrure de Lapin"
#: chicken.lua
msgid "Chicken"
msgstr "Poule"
#: chicken.lua
msgid "Chicken Egg"
msgstr "Œuf"
#: chicken.lua
msgid "Fried Egg"
msgstr "Œuf au plat"
#: chicken.lua
msgid "Raw Chicken"
msgstr "Poulet cru"
#: chicken.lua
msgid "Cooked Chicken"
msgstr "Poulet cuit"
#: chicken.lua
msgid "Feather"
msgstr "Plume"
#: cow.lua
msgid "Cow already milked!"
msgstr "Vache déjà traite !"
#: cow.lua
msgid "Cow"
msgstr "Vache"
#: cow.lua
msgid "Bucket of Milk"
msgstr "Seau de lait"
#: cow.lua
msgid "Cheese"
msgstr "Fromage"
#: cow.lua
msgid "Cheese Block"
msgstr "Bloc de fromage"
#: init.lua
msgid "[MOD] Mobs Redo 'Animals' loaded"
msgstr "[MOD] Mobs Redo 'Animals' chargé"
#: kitten.lua
msgid "Kitten"
msgstr "Chaton"
#: penguin.lua
msgid "Penguin"
msgstr "Manchot"
#: rat.lua
msgid "Rat"
msgstr "Rat"
#: rat.lua
msgid "Cooked Rat"
msgstr "Rat cuit"
#: sheep.lua
msgid "Black"
msgstr "noir"
#: sheep.lua
msgid "Blue"
msgstr "bleu"
#: sheep.lua
msgid "Brown"
msgstr "marron"
#: sheep.lua
msgid "Cyan"
msgstr "cyan"
#: sheep.lua
msgid "Dark Green"
msgstr "vert foncé"
#: sheep.lua
msgid "Dark Grey"
msgstr "gris foncé"
#: sheep.lua
msgid "Green"
msgstr "vert"
#: sheep.lua
msgid "Grey"
msgstr "gris"
#: sheep.lua
msgid "Magenta"
msgstr "magenta"
#: sheep.lua
msgid "Orange"
msgstr "orange"
#: sheep.lua
msgid "Pink"
msgstr "rose"
#: sheep.lua
msgid "Red"
msgstr "rouge"
#: sheep.lua
msgid "Violet"
msgstr "violet"
#: sheep.lua
msgid "White"
msgstr "blanc"
#: sheep.lua
msgid "Yellow"
msgstr "jaune"
#: sheep.lua
#, fuzzy
msgid "@1 Sheep"
msgstr "Mouton @1"
#: sheep.lua
msgid "Raw Mutton"
msgstr "Mouton Cru"
#: sheep.lua
#, fuzzy
msgid "Cooked Mutton"
msgstr "Mouton Cuit"
#: warthog.lua
msgid "Warthog"
msgstr "Sanglier"
#: warthog.lua
msgid "Raw Porkchop"
msgstr "Côte de sanglier crue"
#: warthog.lua
msgid "Cooked Porkchop"
msgstr "Côte de sanglier cuite"

View File

@ -1,201 +0,0 @@
# ITALIAN LOCALE FILE FOR THE MOBS ANMAL MODULE
# Copyright (c) 2014 Krupnov Pavel and 2016 TenPlus1
# This file is distributed under the same license as the MOBS ANIMAL package.
# Hamlet <h4mlet@riseup.net>, 2017.
#
msgid ""
msgstr ""
"Project-Id-Version: Italian localization file for the Mobs Animal mod\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-31 11:28+0200\n"
"PO-Revision-Date: 2017-08-18 00:56+0100\n"
"Last-Translator: H4mlet <h4mlet@riseup.net>\n"
"Language-Team: \n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 1.6.10\n"
#: bee.lua
msgid "Bee"
msgstr "Ape"
#: bee.lua
msgid "Honey"
msgstr "Miele"
#: bee.lua
msgid "Beehive"
msgstr "Favo"
#: bee.lua
msgid "Honey Block"
msgstr "Blocco di miele"
#: bunny.lua
msgid "Bunny"
msgstr "Coniglietto"
#: bunny.lua
msgid "Raw Rabbit"
msgstr "Coniglio Crudo"
#: bunny.lua
#, fuzzy
msgid "Cooked Rabbit"
msgstr "Coniglio Cotto"
#: bunny.lua
msgid "Rabbit Hide"
msgstr "Pelle di Coniglio"
#: chicken.lua
msgid "Chicken"
msgstr "Gallina"
#: chicken.lua
msgid "Chicken Egg"
msgstr "Uovo di gallina"
#: chicken.lua
msgid "Fried Egg"
msgstr "Uovo fritto"
#: chicken.lua
msgid "Raw Chicken"
msgstr "Pollo crudo"
#: chicken.lua
msgid "Cooked Chicken"
msgstr "Pollo cotto"
#: chicken.lua
msgid "Feather"
msgstr "Piuma"
#: cow.lua
msgid "Cow already milked!"
msgstr "Mucca già munta!"
#: cow.lua
msgid "Cow"
msgstr "Mucca"
#: cow.lua
msgid "Bucket of Milk"
msgstr "Secchio di latte"
#: cow.lua
msgid "Cheese"
msgstr "Formaggio"
#: cow.lua
msgid "Cheese Block"
msgstr "Blocco di formaggio"
#: init.lua
msgid "[MOD] Mobs Redo 'Animals' loaded"
msgstr "[MOD] Mobs Redo 'Animals' caricato"
#: kitten.lua
msgid "Kitten"
msgstr "Gattino"
#: penguin.lua
msgid "Penguin"
msgstr "Pinguino"
#: rat.lua
msgid "Rat"
msgstr "Ratto"
#: rat.lua
msgid "Cooked Rat"
msgstr "Ratto cotto"
#: sheep.lua
msgid "Black"
msgstr "Nera"
#: sheep.lua
msgid "Blue"
msgstr "Blu"
#: sheep.lua
msgid "Brown"
msgstr "Marrone"
#: sheep.lua
msgid "Cyan"
msgstr "Ciano"
#: sheep.lua
msgid "Dark Green"
msgstr "Verde scuro"
#: sheep.lua
msgid "Dark Grey"
msgstr "Grigio scuro"
#: sheep.lua
msgid "Green"
msgstr "Verde"
#: sheep.lua
msgid "Grey"
msgstr "Grigia"
#: sheep.lua
msgid "Magenta"
msgstr "Magenta"
#: sheep.lua
msgid "Orange"
msgstr "Arancione"
#: sheep.lua
msgid "Pink"
msgstr "Rosa"
#: sheep.lua
msgid "Red"
msgstr "Rossa"
#: sheep.lua
msgid "Violet"
msgstr "Viola"
#: sheep.lua
msgid "White"
msgstr "Bianca"
#: sheep.lua
msgid "Yellow"
msgstr "Gialla"
#: sheep.lua
msgid "@1 Sheep"
msgstr "Pecora @1"
#: sheep.lua
msgid "Raw Mutton"
msgstr "Montone Crudo"
#: sheep.lua
#, fuzzy
msgid "Cooked Mutton"
msgstr "Montone Cotto"
#: warthog.lua
msgid "Warthog"
msgstr "Facocero"
#: warthog.lua
msgid "Raw Porkchop"
msgstr "Bistecca di maiale cruda"
#: warthog.lua
msgid "Cooked Porkchop"
msgstr "Bistecca di maiale cotta"

View File

@ -1,199 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-02-06 00:17+0800\n"
"PO-Revision-Date: 2018-02-06 00:25+0800\n"
"Last-Translator: MuhdNurHidayat (MNH48) <mnh48mail@gmail.com>\n"
"Language-Team: \n"
"Language: ms\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.0.6\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: bee.lua
msgid "Bee"
msgstr "Lebah"
#: bee.lua
msgid "Honey"
msgstr "Madu"
#: bee.lua
msgid "Beehive"
msgstr "Sarang Lebah"
#: bee.lua
msgid "Honey Block"
msgstr "Blok Madu"
#: bunny.lua
msgid "Bunny"
msgstr "Arnab"
#: bunny.lua
msgid "Raw Rabbit"
msgstr "Daging Arnab Mentah"
#: bunny.lua
msgid "Cooked Rabbit"
msgstr "Daging Arnab Bakar"
#: bunny.lua
msgid "Rabbit Hide"
msgstr "Belulang Arnab"
#: chicken.lua
msgid "Chicken"
msgstr "Ayam"
#: chicken.lua
msgid "Chicken Egg"
msgstr "Telur Ayam"
#: chicken.lua
msgid "Fried Egg"
msgstr "Telur Goreng"
#: chicken.lua
msgid "Raw Chicken"
msgstr "Ayam Mentah"
#: chicken.lua
msgid "Cooked Chicken"
msgstr "Ayam Bakar"
#: chicken.lua
msgid "Feather"
msgstr "Bulu"
#: cow.lua
msgid "Cow already milked!"
msgstr "Lembu telah diperah susunya!"
#: cow.lua
msgid "Cow"
msgstr "Lembu"
#: cow.lua
msgid "Bucket of Milk"
msgstr "Baldi Susu"
#: cow.lua
msgid "Cheese"
msgstr "Keju"
#: cow.lua
msgid "Cheese Block"
msgstr "Blok Keju"
#: init.lua
msgid "[MOD] Mobs Redo 'Animals' loaded"
msgstr "[MODS] Mobs Redo 'Animals' telah dimuatkan"
#: kitten.lua
msgid "Kitten"
msgstr "Anak Kucing"
#: penguin.lua
msgid "Penguin"
msgstr "Penguin"
#: rat.lua
msgid "Rat"
msgstr "Tikus"
#: rat.lua
msgid "Cooked Rat"
msgstr "Tikus Bakar"
#: sheep.lua
msgid "Black"
msgstr "Hitam"
#: sheep.lua
msgid "Blue"
msgstr "Biru"
#: sheep.lua
msgid "Brown"
msgstr "Perang"
#: sheep.lua
msgid "Cyan"
msgstr "Sian"
#: sheep.lua
msgid "Dark Green"
msgstr "Hijau Gelap"
#: sheep.lua
msgid "Dark Grey"
msgstr "Kelabu Gelap"
#: sheep.lua
msgid "Green"
msgstr "Hijau"
#: sheep.lua
msgid "Grey"
msgstr "Kelabu"
#: sheep.lua
msgid "Magenta"
msgstr "Merah Lembayung"
#: sheep.lua
msgid "Orange"
msgstr "Jingga"
#: sheep.lua
msgid "Pink"
msgstr "Merah Jambu"
#: sheep.lua
msgid "Red"
msgstr "Merah"
#: sheep.lua
msgid "Violet"
msgstr "Ungu"
#: sheep.lua
msgid "White"
msgstr "Putih"
#: sheep.lua
msgid "Yellow"
msgstr "Kuning"
#: sheep.lua
msgid "@1 Sheep"
msgstr "Biri-biri @1"
#: sheep.lua
msgid "Raw Mutton"
msgstr "Daging Biri-biri Mentah"
#: sheep.lua
msgid "Cooked Mutton"
msgstr "Daging Biri-biri Bakar"
#: warthog.lua
msgid "Warthog"
msgstr "Babi Hutan"
#: warthog.lua
msgid "Raw Porkchop"
msgstr "Daging Babi Mentah"
#: warthog.lua
msgid "Cooked Porkchop"
msgstr "Daging Babi Bakar"

View File

@ -1,216 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-08-13 16:00 (UTC+5)\n"
"PO-Revision-Date: 2020-06-19 19:00 (UTC+3)\n"
"Last-Translator: YELLOW <pikayellow35@gmail.com>\n"
"Language-Team: \n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: bee.lua
msgid "Bee"
msgstr "Пчела"
#: bee.lua
msgid "Honey"
msgstr "Мёд"
#: bee.lua
msgid "Beehive"
msgstr "Улей"
#: bee.lua
msgid "Honey Block"
msgstr "Блок мёда"
#: bunny.lua
msgid "Bunny"
msgstr "Кролик"
#: bunny.lua
msgid "Raw Rabbit"
msgstr "Сырая крольчатина"
#: bunny.lua
#, fuzzy
msgid "Cooked Rabbit"
msgstr "Приготовленная крольчатина"
#: bunny.lua
msgid "Rabbit Hide"
msgstr "Кроличья шкурка"
#: chicken.lua
msgid "Chicken"
msgstr "Курица"
#: chicken.lua
msgid "Chicken Egg"
msgstr "Куриное яйцо"
#: chicken.lua
msgid "Fried Egg"
msgstr "Яичница"
#: chicken.lua
msgid "Raw Chicken"
msgstr "Сырая курятина"
#: chicken.lua
msgid "Cooked Chicken"
msgstr "Приготовленная курятина"
#: chicken.lua
msgid "Feather"
msgstr "Перо"
#: cow.lua
msgid "Cow already milked!"
msgstr "Корову уже подоили!"
#: cow.lua
msgid "Cow"
msgstr "Корова"
#: cow.lua
msgid "Bucket of Milk"
msgstr "Ведро молока"
#: cow.lua
msgid "Glass of Milk"
msgstr "Стакан молока"
#: cow.lua
msgid "Butter"
msgstr "Масло"
#: cow.lua
msgid "Cheese"
msgstr "Сыр"
#: cow.lua
msgid "Cheese Block"
msgstr "Блок сыра"
#: init.lua
msgid "[MOD] Mobs Redo 'Animals' loaded"
msgstr "[МОД] Mobs Redo 'Animals' загружен"
#: kitten.lua
msgid "Kitten"
msgstr "Котенок"
#: kitten.lua
msgid "Hairball"
msgstr "Комочек шерсти"
#: panda.lua
msgid "Panda"
msgstr "Панда"
#: penguin.lua
msgid "Penguin"
msgstr "Пингвин"
#: rat.lua
msgid "Rat"
msgstr "Крыса"
#: rat.lua
msgid "Cooked Rat"
msgstr "Приготовленная крыса"
#: sheep.lua
msgid "Black"
msgstr "Черная"
#: sheep.lua
msgid "Blue"
msgstr "Синяя"
#: sheep.lua
msgid "Brown"
msgstr "Коричневая"
#: sheep.lua
msgid "Cyan"
msgstr "Голубая"
#: sheep.lua
msgid "Dark Green"
msgstr "Темно-зеленая"
#: sheep.lua
msgid "Dark Grey"
msgstr "Темно-серая"
#: sheep.lua
msgid "Green"
msgstr "Зеленая"
#: sheep.lua
msgid "Grey"
msgstr "Серая"
#: sheep.lua
msgid "Magenta"
msgstr "Пурпурная"
#: sheep.lua
msgid "Orange"
msgstr "Оранжевая"
#: sheep.lua
msgid "Pink"
msgstr "Розовая"
#: sheep.lua
msgid "Red"
msgstr "Красная"
#: sheep.lua
msgid "Violet"
msgstr "Фиолетовая"
#: sheep.lua
msgid "White"
msgstr "Белая"
#: sheep.lua
msgid "Yellow"
msgstr "Желтая"
#: sheep.lua
msgid "@1 Sheep"
msgstr "@1 овца"
#: sheep.lua
msgid "Raw Mutton"
msgstr "Сырая баранина"
#: sheep.lua
#, fuzzy
msgid "Cooked Mutton"
msgstr "Приготовленная баранина"
#: warthog.lua
msgid "Warthog"
msgstr "Бородавочник"
#: warthog.lua
msgid "Raw Porkchop"
msgstr "Свиные отбивные"
#: warthog.lua
msgid "Cooked Porkchop"
msgstr "Приготовленные свиные отбивные"

View File

@ -1,198 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-31 11:28+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: bee.lua
msgid "Bee"
msgstr ""
#: bee.lua
msgid "Honey"
msgstr ""
#: bee.lua
msgid "Beehive"
msgstr ""
#: bee.lua
msgid "Honey Block"
msgstr ""
#: bunny.lua
msgid "Bunny"
msgstr ""
#: bunny.lua
msgid "Raw Rabbit"
msgstr ""
#: bunny.lua
msgid "Cooked Rabbit"
msgstr ""
#: bunny.lua
msgid "Rabbit Hide"
msgstr ""
#: chicken.lua
msgid "Chicken"
msgstr ""
#: chicken.lua
msgid "Chicken Egg"
msgstr ""
#: chicken.lua
msgid "Fried Egg"
msgstr ""
#: chicken.lua
msgid "Raw Chicken"
msgstr ""
#: chicken.lua
msgid "Cooked Chicken"
msgstr ""
#: chicken.lua
msgid "Feather"
msgstr ""
#: cow.lua
msgid "Cow already milked!"
msgstr ""
#: cow.lua
msgid "Cow"
msgstr ""
#: cow.lua
msgid "Bucket of Milk"
msgstr ""
#: cow.lua
msgid "Cheese"
msgstr ""
#: cow.lua
msgid "Cheese Block"
msgstr ""
#: init.lua
msgid "[MOD] Mobs Redo 'Animals' loaded"
msgstr ""
#: kitten.lua
msgid "Kitten"
msgstr ""
#: penguin.lua
msgid "Penguin"
msgstr ""
#: rat.lua
msgid "Rat"
msgstr ""
#: rat.lua
msgid "Cooked Rat"
msgstr ""
#: sheep.lua
msgid "Black"
msgstr ""
#: sheep.lua
msgid "Blue"
msgstr ""
#: sheep.lua
msgid "Brown"
msgstr ""
#: sheep.lua
msgid "Cyan"
msgstr ""
#: sheep.lua
msgid "Dark Green"
msgstr ""
#: sheep.lua
msgid "Dark Grey"
msgstr ""
#: sheep.lua
msgid "Green"
msgstr ""
#: sheep.lua
msgid "Grey"
msgstr ""
#: sheep.lua
msgid "Magenta"
msgstr ""
#: sheep.lua
msgid "Orange"
msgstr ""
#: sheep.lua
msgid "Pink"
msgstr ""
#: sheep.lua
msgid "Red"
msgstr ""
#: sheep.lua
msgid "Violet"
msgstr ""
#: sheep.lua
msgid "White"
msgstr ""
#: sheep.lua
msgid "Yellow"
msgstr ""
#: sheep.lua
msgid "@1 Sheep"
msgstr ""
#: sheep.lua
msgid "Raw Mutton"
msgstr ""
#: sheep.lua
msgid "Cooked Mutton"
msgstr ""
#: warthog.lua
msgid "Warthog"
msgstr ""
#: warthog.lua
msgid "Raw Porkchop"
msgstr ""
#: warthog.lua
msgid "Cooked Porkchop"
msgstr ""

View File

@ -1,202 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-31 11:28+0200\n"
"PO-Revision-Date: 2017-04-26 09:02+0200\n"
"Last-Translator: Admicos\n"
"Language-Team: \n"
"Language: tr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.8.12\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: bee.lua
msgid "Bee"
msgstr "Arı"
#: bee.lua
msgid "Honey"
msgstr "Bal"
#: bee.lua
msgid "Beehive"
msgstr "Arı kovanı"
#: bee.lua
msgid "Honey Block"
msgstr "Bal bloğu"
#: bunny.lua
msgid "Bunny"
msgstr "Tavşan"
#: bunny.lua
msgid "Raw Rabbit"
msgstr "çiğ tavşan"
#: bunny.lua
#, fuzzy
msgid "Cooked Rabbit"
msgstr "pişmiş tavşan"
#: bunny.lua
msgid "Rabbit Hide"
msgstr "tavşan kürkü"
#: chicken.lua
msgid "Chicken"
msgstr "Tavuk"
#: chicken.lua
msgid "Chicken Egg"
msgstr "Tavuk yumurtası "
#: chicken.lua
msgid "Fried Egg"
msgstr "Kızarmış yumurta"
#: chicken.lua
msgid "Raw Chicken"
msgstr "Çiğ tavuk"
#: chicken.lua
msgid "Cooked Chicken"
msgstr "Pişmiş tavuk"
#: chicken.lua
msgid "Feather"
msgstr ""
#: cow.lua
msgid "Cow already milked!"
msgstr "İnekte süt yok!"
#: cow.lua
msgid "Cow"
msgstr "İnek"
#: cow.lua
msgid "Bucket of Milk"
msgstr "Süt kovası"
#: cow.lua
msgid "Cheese"
msgstr "Peynir"
#: cow.lua
msgid "Cheese Block"
msgstr "Peynir bloğu"
#: init.lua
msgid "[MOD] Mobs Redo 'Animals' loaded"
msgstr "[MOD] Mobs Redo 'Hayvanlar' yüklendi"
#: kitten.lua
msgid "Kitten"
msgstr "Yavru kedi"
#: penguin.lua
msgid "Penguin"
msgstr ""
#: rat.lua
msgid "Rat"
msgstr "Sıçan"
#: rat.lua
msgid "Cooked Rat"
msgstr "Pişmiş sıçan"
#: sheep.lua
msgid "Black"
msgstr "Siyah"
#: sheep.lua
msgid "Blue"
msgstr "Mavi"
#: sheep.lua
msgid "Brown"
msgstr "Kahverengi"
#: sheep.lua
msgid "Cyan"
msgstr "Camgöbeği"
#: sheep.lua
msgid "Dark Green"
msgstr "Koyu yeşil"
#: sheep.lua
msgid "Dark Grey"
msgstr "Koyu gri"
#: sheep.lua
msgid "Green"
msgstr "Yeşil"
#: sheep.lua
msgid "Grey"
msgstr "Gri"
#: sheep.lua
msgid "Magenta"
msgstr "Macenta"
#: sheep.lua
msgid "Orange"
msgstr "Turuncu"
#: sheep.lua
msgid "Pink"
msgstr "Pembe"
#: sheep.lua
msgid "Red"
msgstr "Kırmızı"
#: sheep.lua
msgid "Violet"
msgstr "Mor"
#: sheep.lua
msgid "White"
msgstr "Beyaz"
#: sheep.lua
msgid "Yellow"
msgstr "Sarı"
#: sheep.lua
#, fuzzy
msgid "@1 Sheep"
msgstr "@1 Koyun"
#: sheep.lua
msgid "Raw Mutton"
msgstr "çiğ kuzu"
#: sheep.lua
#, fuzzy
msgid "Cooked Mutton"
msgstr "pişmiş kuzu"
#: warthog.lua
msgid "Warthog"
msgstr "Domuz"
#: warthog.lua
msgid "Raw Porkchop"
msgstr "Çiğ pirzola"
#: warthog.lua
msgid "Cooked Porkchop"
msgstr "Pişmiş pirzola"

View File

@ -1,206 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# IFRFSX <1079092922@qq.com>, 2020.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-31 11:28+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: bee.lua
msgid "Bee"
msgstr "蜜蜂"
#: bee.lua
msgid "Honey"
msgstr "蜂蜜"
#: bee.lua
msgid "Beehive"
msgstr "蜂巢"
#: bee.lua
msgid "Honey Block"
msgstr "蜂蜜方块"
#: bunny.lua
msgid "Bunny"
msgstr "兔子"
#: bunny.lua
msgid "Raw Rabbit"
msgstr "生兔肉"
#: bunny.lua
msgid "Cooked Rabbit"
msgstr "熟兔肉"
#: bunny.lua
msgid "Rabbit Hide"
msgstr "兔子皮"
#: chicken.lua
msgid "Chicken"
msgstr "鸡"
#: chicken.lua
msgid "Chicken Egg"
msgstr "鸡蛋"
#: chicken.lua
msgid "Fried Egg"
msgstr "煎蛋"
#: chicken.lua
msgid "Raw Chicken"
msgstr "生鸡肉"
#: chicken.lua
msgid "Cooked Chicken"
msgstr "熟鸡肉"
#: chicken.lua
msgid "Feather"
msgstr "羽毛"
#: cow.lua
msgid "Cow already milked!"
msgstr "奶牛已经被挤奶了!"
#: cow.lua
msgid "Cow"
msgstr "奶牛"
#: cow.lua
msgid "Bucket of Milk"
msgstr "一桶牛奶"
#: cow.lua
msgid "Glass of Milk"
msgstr "一杯牛奶"
#: cow.lua
msgid "Cheese"
msgstr "奶酪"
#: cow.lua
msgid "Cheese Block"
msgstr "奶酪方块"
#: init.lua
msgid "[MOD] Mobs Redo 'Animals' loaded"
msgstr "[模组] Mobs Redo 'Animals' 已加载!"
#: kitten.lua
msgid "Kitten"
msgstr "小猫"
#: kitten.lua
msgid "Hairball"
msgstr "毛球"
#: penguin.lua
msgid "Penguin"
msgstr "企鹅"
#: rat.lua
msgid "Rat"
msgstr "老鼠"
#: rat.lua
msgid "Cooked Rat"
msgstr "熟老鼠"
#: sheep.lua
msgid "Black"
msgstr "黑"
#: sheep.lua
msgid "Blue"
msgstr "蓝"
#: sheep.lua
msgid "Brown"
msgstr "棕"
#: sheep.lua
msgid "Cyan"
msgstr "青"
#: sheep.lua
msgid "Dark Green"
msgstr "蓝绿"
#: sheep.lua
msgid "Dark Grey"
msgstr "蓝灰"
#: sheep.lua
msgid "Green"
msgstr "绿"
#: sheep.lua
msgid "Grey"
msgstr "灰"
#: sheep.lua
msgid "Magenta"
msgstr "品红"
#: sheep.lua
msgid "Orange"
msgstr "橙"
#: sheep.lua
msgid "Pink"
msgstr "粉红"
#: sheep.lua
msgid "Red"
msgstr "红"
#: sheep.lua
msgid "Violet"
msgstr "紫"
#: sheep.lua
msgid "White"
msgstr "白"
#: sheep.lua
msgid "Yellow"
msgstr "黄"
#: sheep.lua
msgid "@1 Sheep"
msgstr "@1羊"
#: sheep.lua
msgid "Raw Mutton"
msgstr "生羊肉"
#: sheep.lua
msgid "Cooked Mutton"
msgstr "熟羊肉"
#: warthog.lua
msgid "Warthog"
msgstr "野猪"
#: warthog.lua
msgid "Raw Porkchop"
msgstr "生猪排"
#: warthog.lua
msgid "Cooked Porkchop"
msgstr "熟猪排"

View File

@ -1,53 +0,0 @@
# Template for translations of mobs_animal mod
# last update: 2020/02/13
Bee = 蜜蜂
Honey = 蜂蜜
Beehive = 蜂巢
Honey Block = 蜂蜜方块
Butter = 黄油
Bunny = 兔子
Raw Rabbit = 生兔肉
Cooked Rabbit = 熟兔肉
Rabbit Hide = 兔子皮
Chicken = 鸡
Chicken Egg = 鸡蛋
Fried Egg = 煎蛋
Raw Chicken = 生鸡肉
Cooked Chicken = 熟鸡肉
Feather = 羽毛
Cow already milked! = 奶牛已被挤奶!
Cow = 奶牛
Bucket of Milk = 一桶牛奶
Cheese = 奶酪
Cheese Block = 奶酪方块
[MOD] Mobs Redo 'Animals' loaded = [模组] Mobs Redo 'Animals' 已加载!
Kitten = 小猫
Penguin = 企鹅
Rat = 老鼠
Cooked Rat = 熟老鼠
Black = 黑
Blue = 蓝
Brown = 棕
Cyan = 青
Dark Green = 暗绿
Dark Grey = 暗灰
Green = 绿
Grey = 灰
Magenta = 品红
Orange = 橙
Pink = 粉红
Red = 红
Violet = 紫
White = 白
Yellow = 黄
@1 Sheep = @1羊
Raw Mutton = 生羊肉
Cooked Mutton = 熟羊肉
Warthog = 野猪
Raw Porkchop = 生猪排
Cooked Porkchop = 熟猪排
Panda = 熊猫
Glass of Milk = 一杯牛奶
Hairball = 毛球

View File

@ -1,53 +0,0 @@
# Template for translations of mobs_animal mod
# last update: 2020/02/13
Bee = 蜜蜂
Honey = 蜂蜜
Beehive = 蜂巢
Honey Block = 蜂蜜方塊
Butter = 黃油
Bunny = 兔子
Raw Rabbit = 生兔肉
Cooked Rabbit = 熟兔肉
Rabbit Hide = 兔子皮
Chicken = 雞
Chicken Egg = 雞蛋
Fried Egg = 煎蛋
Raw Chicken = 生雞肉
Cooked Chicken = 熟雞肉
Feather = 羽毛
Cow already milked! = 奶牛已被擠奶!
Cow = 奶牛
Bucket of Milk = 一桶牛奶
Cheese = 奶酪
Cheese Block = 奶酪方塊
[MOD] Mobs Redo 'Animals' loaded = [模組] Mobs Redo 'Animals' 已加載!
Kitten = 小貓
Penguin = 企鵝
Rat = 老鼠
Cooked Rat = 熟老鼠
Black = 黑
Blue = 藍
Brown = 棕
Cyan = 青
Dark Green = 暗綠
Dark Grey = 暗灰
Green = 綠
Grey = 灰
Magenta = 品紅
Orange = 橙
Pink = 粉紅
Red = 紅
Violet = 紫
White = 白
Yellow = 黃
@1 Sheep = @1羊
Raw Mutton = 生羊肉
Cooked Mutton = 熟羊肉
Warthog = 野豬
Raw Porkchop = 生豬排
Cooked Porkchop = 熟豬排
Panda = 熊貓
Glass of Milk = 一杯牛奶
Hairball = 毛球

View File

@ -1,31 +0,0 @@
if minetest.get_modpath("lucky_block") then
lucky_block:add_blocks({
{"spw", "mobs:sheep", 5},
{"spw", "mobs:rat", 5},
{"dro", {"mobs:rat_cooked"}, 5},
{"spw", "mobs:bunny", 3},
{"nod", "mobs:honey_block", 0},
{"spw", "mobs:pumba", 5},
{"nod", "mobs:cheeseblock", 0},
{"spw", "mobs:chicken", 5},
{"dro", {"mobs:egg"}, 5},
{"spw", "mobs:cow", 5},
{"dro", {"mobs:bucket_milk"}, 8},
{"spw", "mobs:kitten", 2},
{"exp"},
{"dro", {"mobs:hairball"}, 3},
{"dro", {"mobs:chicken_raw", "mobs:chicken_cooked"}, 10},
{"dro", {"mobs:pork_raw", "mobs:pork_cooked"}, 10},
{"dro", {"mobs:mutton_raw", "mobs:mutton_cooked"}, 10},
{"dro", {"mobs:meat_raw", "mobs:meat"}, 10},
{"dro", {"mobs:glass_milk"}, 5},
})
if minetest.registered_nodes["default:nyancat"] then
lucky_block:add_blocks({
{"tro", "default:nyancat", "mobs_kitten", true},
})
end
end

View File

@ -1 +0,0 @@
name = mobs_animal

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,86 +0,0 @@
local S = mobs.intllib
-- Panda by AspireMint (CC BY-SA 3.0)
mobs:register_mob("mobs_animal:panda", {
stepheight = 0.6,
type = "animal",
passive = false,
attack_type = "dogfight",
group_attack = false,
owner_loyal = true,
attack_npcs = false,
reach = 2,
damage = 3,
hp_min = 10,
hp_max = 24,
armor = 200,
collisionbox = {-0.4, -0.45, -0.4, 0.4, 0.45, 0.4},
visual = "mesh",
mesh = "mobs_panda.b3d",
textures = {
{"mobs_panda.png"},
},
makes_footstep_sound = true,
sounds = {
random = "mobs_panda",
attack = "mobs_panda",
},
walk_chance = 5,
walk_velocity = 0.5,
run_velocity = 1.5,
jump = false,
jump_height = 6,
follow = {"ethereal:bamboo", "bamboo:trunk"},
view_range = 8,
drops = {
{name = "mobs:meat_raw", chance = 1, min = 1, max = 2},
},
water_damage = 0,
lava_damage = 5,
light_damage = 0,
fear_height = 6,
animation = {
speed_normal = 15,
stand_start = 130,
stand_end = 270,
stand1_start = 0,
stand1_end = 0,
stand2_start = 1,
stand2_end = 1,
stand3_start = 2,
stand3_end = 2,
walk_start = 10,
walk_end = 70,
run_start = 10,
run_end = 70,
punch_start = 80,
punch_end = 120,
-- 0 = rest, 1 = hiding (covers eyes), 2 = surprised
},
on_rightclick = function(self, clicker)
if mobs:feed_tame(self, clicker, 20, true, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 0, 5, 50, false, nil) then return end
end,
})
if minetest.get_modpath("ethereal") then
mobs:spawn({
name = "mobs_animal:panda",
nodes = {"ethereal:bamboo_dirt"},
neighbors = {"group:grass"},
min_light = 14,
interval = 60,
chance = 8000, -- 15000
min_height = 10,
max_height = 80,
day_toggle = true,
})
end
mobs:register_egg("mobs_animal:panda", S("Panda"), "mobs_panda_inv.png")

View File

@ -1,76 +0,0 @@
local S = mobs.intllib
-- Penguin by D00Med
mobs:register_mob("mobs_animal:penguin", {
stepheight = 0.6,
type = "animal",
passive = true,
reach = 1,
hp_min = 5,
hp_max = 10,
armor = 200,
collisionbox = {-0.2, -0.0, -0.2, 0.2, 0.5, 0.2},
visual = "mesh",
mesh = "mobs_penguin.b3d",
visual_size = {x = 0.25, y = 0.25},
textures = {
{"mobs_penguin.png"},
},
sounds = {},
makes_footstep_sound = true,
walk_velocity = 1,
run_velocity = 2,
runaway = true,
jump = false,
stepheight = 1.1,
drops = {
{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
},
water_damage = 0,
lava_damage = 4,
light_damage = 0,
fear_height = 2,
animation = {
speed_normal = 15,
stand_start = 1,
stand_end = 20,
walk_start = 25,
walk_end = 45,
fly_start = 75, -- swim animation
fly_end = 95,
-- 50-70 is slide/water idle
},
fly_in = {"default:water_source", "default:water_flowing"},
floats = 0,
follow = {
"ethereal:fish_raw", "mobs_fish:clownfish", "mobs_fish:tropical",
"mobs_fish:clownfish_set", "mobs_fish:tropical_set"
},
view_range = 5,
on_rightclick = function(self, clicker)
-- feed or tame
if mobs:feed_tame(self, clicker, 4, false, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 5, 50, 80, false, nil) then return end
end,
})
mobs:spawn({
name = "mobs_animal:penguin",
nodes = {"default:snowblock"},
min_light = 14,
interval = 60,
chance = 20000,
min_height = 0,
max_height = 200,
day_toggle = true,
})
mobs:register_egg("mobs_animal:penguin", S("Penguin"), "mobs_penguin_inv.png")

View File

@ -1,101 +0,0 @@
local S = mobs.intllib
-- Rat by PilzAdam (B3D model by sirrobzeroone)
mobs:register_mob("mobs_animal:rat", {
stepheight = 0.6,
type = "animal",
passive = true,
hp_min = 1,
hp_max = 4,
armor = 200,
collisionbox = {-0.2, -1, -0.2, 0.2, -0.8, 0.2},
visual = "mesh",
mesh = "mobs_rat.b3d",
textures = {
{"mobs_rat.png"},
{"mobs_rat2.png"},
},
makes_footstep_sound = false,
sounds = {
random = "mobs_rat",
},
walk_velocity = 1,
run_velocity = 2,
runaway = true,
jump = true,
water_damage = 0,
lava_damage = 4,
light_damage = 0,
fear_height = 2,
on_rightclick = function(self, clicker)
mobs:capture_mob(self, clicker, 50, 90, 0, true, "mobs_animal:rat")
end,
--[[
do_custom = function(self, dtime)
self.rat_timer = (self.rat_timer or 0) + dtime
if self.rat_timer < 1 then return end -- every 1 second
self.rat_timer = 0
local pos = self.object:get_pos()
print("rat pos", pos.x, pos.y, pos.z, dtime)
return false -- return but skip doing rest of API
end,
]]
--[[
on_blast = function(obj, damage)
print ("--- damage is", damage)
print ("--- mob is", obj.object:get_luaentity().name)
-- return's do_damage, do_knockback and drops
return false, true, {"default:mese"}
end,
]]
})
local function rat_spawn(self, pos)
self = self:get_luaentity()
print (self.name, pos.x, pos.y, pos.z)
self.hp_max = 100
self.health = 100
end
mobs:spawn({
name = "mobs_animal:rat",
nodes = {"default:stone"},
min_light = 3,
max_light = 9,
interval = 60,
chance = 8000,
max_height = 0,
-- on_spawn = rat_spawn,
})
mobs:register_egg("mobs_animal:rat", S("Rat"), "mobs_rat_inv.png")
mobs:alias_mob("mobs:rat", "mobs_animal:rat") -- compatibility
-- cooked rat, yummy!
minetest.register_craftitem(":mobs:rat_cooked", {
description = S("Cooked Rat"),
inventory_image = "mobs_cooked_rat.png",
on_use = minetest.item_eat(3),
groups = {food_rat = 1, flammable = 2},
})
minetest.register_craft({
type = "cooking",
output = "mobs:rat_cooked",
recipe = "mobs_animal:rat",
cooktime = 5,
})

View File

@ -1,45 +0,0 @@
# ANIMAL MOBS
### Bee
Tends to buzz around flowers and gives honey when killed, you can also right-click a bee to pick it up and place in inventory. 3x bee's in a row can craft a beehive.
---
### Bunny
Bunnies appear in green grass areas (prairie biome in ethereal) and can be tamed with 4 carrots or grass. Can also be picked up and placed in inventory and gives 1 raw rabbit and 1 rabbit hide when killed.
---
### Chicken
Found in green areas (bamboo biome in ethereal) and lays eggs on flat ground, Can be picked up and placed in inventory and gives 1-2 raw chicken when killed. Feed 8x wheat seed to breed.
---
### Cow
Wanders around eating grass/wheat and can be right-clicked with empty bucket to get milk. Cows will defend themselves when hit and can be right-clicked with 8x wheat to tame and breed.
---
### Kitten
Found on green grass these cute cats walk around and can be picked up and placed in inventory as pets or right-clicked with 4x live rats or raw fish (found in ethereal) and tamed. They can sometimes leave you little gifts of a hairball.
---
### Rat
Typically found around stone they can be picked up and cooked for eating.
---
### Sheep
Green grass and wheat munchers that can be clipped using shears to give 1-3 wool. Feed sheep 8x wheat to regrow wool, tame and breed. Right-click a tamed sheep with dye to change it's colour. Will drop 1-3 raw mutton when killed.
---
### Warthog
Warthogs unlike pigs defend themselves when hit and give 1-3 raw pork when killed, they can also be right-clicked with 8x apples to tame or breed.
---
### Penguin
These little guys can be found in glacier biomes on top of snow and have the ability to swim if they fall into water.
---
### Panda
These monochrome cuties spawn in Ethereal's bamboo biome and can be tamed with bamboo stalks :) Remember they have claws though.
---
*Note: After breeding, animals need to rest for 4 minutes and baby animals take 4 minutes to grow up, also feeding them helps them grow quicker...*
#### Lucky Blocks: 20

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

View File

@ -1,243 +0,0 @@
local S = mobs.intllib
local all_colours = {
{"black", S("Black"), "#000000b0"},
{"blue", S("Blue"), "#015dbb70"},
{"brown", S("Brown"), "#663300a0"},
{"cyan", S("Cyan"), "#01ffd870"},
{"dark_green", S("Dark Green"), "#005b0770"},
{"dark_grey", S("Dark Grey"), "#303030b0"},
{"green", S("Green"), "#61ff0170"},
{"grey", S("Grey"), "#5b5b5bb0"},
{"magenta", S("Magenta"), "#ff05bb70"},
{"orange", S("Orange"), "#ff840170"},
{"pink", S("Pink"), "#ff65b570"},
{"red", S("Red"), "#ff0000a0"},
{"violet", S("Violet"), "#2000c970"},
{"white", S("White"), "#abababc0"},
{"yellow", S("Yellow"), "#e3ff0070"},
}
-- Sheep by PilzAdam, texture converted to minetest by AMMOnym from Summerfield pack
for _, col in ipairs(all_colours) do
mobs:register_mob("mobs_animal:sheep_"..col[1], {
stay_near = {"farming:straw", 10},
stepheight = 0.6,
type = "animal",
passive = true,
hp_min = 8,
hp_max = 10,
armor = 200,
collisionbox = {-0.5, -1, -0.5, 0.5, 0.3, 0.5},
visual = "mesh",
mesh = "mobs_sheep.b3d",
textures = {
{"mobs_sheep_base.png^(mobs_sheep_wool.png^[colorize:" .. col[3] .. ")"},
},
gotten_texture = {"mobs_sheep_shaved.png"},
gotten_mesh = "mobs_sheep_shaved.b3d",
makes_footstep_sound = true,
sounds = {
random = "mobs_sheep",
},
walk_velocity = 1,
run_velocity = 2,
runaway = true,
jump = true,
jump_height = 6,
pushable = true,
drops = {
{name = "mobs:mutton_raw", chance = 1, min = 1, max = 2},
{name = "wool:"..col[1], chance = 1, min = 1, max = 1},
},
water_damage = 0,
lava_damage = 5,
light_damage = 0,
animation = {
speed_normal = 15,
speed_run = 15,
stand_start = 0,
stand_end = 80,
walk_start = 81,
walk_end = 100,
},
follow = {"farming:wheat", "default:grass_1"},
view_range = 8,
replace_rate = 10,
replace_what = {
{"group:grass", "air", -1},
{"default:dirt_with_grass", "default:dirt", -2}
},
fear_height = 3,
on_replace = function(self, pos, oldnode, newnode)
self.food = (self.food or 0) + 1
-- if sheep replaces 8x grass then it regrows wool
if self.food >= 8 then
self.food = 0
self.gotten = false
self.object:set_properties({
textures = {"mobs_sheep_base.png^(mobs_sheep_wool.png^[colorize:" .. col[3] .. ")"},
mesh = "mobs_sheep.b3d",
})
end
end,
on_rightclick = function(self, clicker)
--are we feeding?
if mobs:feed_tame(self, clicker, 8, true, true) then
--if fed 7x grass or wheat then sheep regrows wool
if self.food and self.food > 6 then
self.gotten = false
self.object:set_properties({
textures = {"mobs_sheep_base.png^(mobs_sheep_wool.png^[colorize:" .. col[3] .. ")"},
mesh = "mobs_sheep.b3d",
})
end
return
end
local item = clicker:get_wielded_item()
local itemname = item:get_name()
local name = clicker:get_player_name()
--are we giving a haircut>
if itemname == "mobs:shears" then
if self.gotten ~= false
or self.child ~= false
or name ~= self.owner
or not minetest.get_modpath("wool") then
return
end
self.gotten = true -- shaved
local obj = minetest.add_item(
self.object:get_pos(),
ItemStack( "wool:" .. col[1] .. " " .. math.random(1, 3) )
)
if obj then
obj:setvelocity({
x = math.random(-1, 1),
y = 5,
z = math.random(-1, 1)
})
end
item:add_wear(650) -- 100 uses
clicker:set_wielded_item(item)
self.object:set_properties({
textures = {"mobs_sheep_shaved.png"},
mesh = "mobs_sheep_shaved.b3d",
})
return
end
--are we coloring?
if itemname:find("dye:") then
if self.gotten == false
and self.child == false
and self.tamed == true
and name == self.owner then
local colr = string.split(itemname, ":")[2]
for _,c in pairs(all_colours) do
if c[1] == colr then
local pos = self.object:get_pos()
self.object:remove()
local mob = minetest.add_entity(pos, "mobs_animal:sheep_" .. colr)
local ent = mob:get_luaentity()
ent.owner = name
ent.tamed = true
-- take item
if not mobs.is_creative(clicker:get_player_name()) then
item:take_item()
clicker:set_wielded_item(item)
end
break
end
end
end
return
end
-- protect mod with mobs:protector item
if mobs:protect(self, clicker) then return end
--are we capturing?
if mobs:capture_mob(self, clicker, 0, 5, 60, false, nil) then return end
end
})
mobs:register_egg("mobs_animal:sheep_"..col[1], S("@1 Sheep", col[2]), "wool_"..col[1]..".png^mobs_sheep_inv.png")
-- compatibility
mobs:alias_mob("mobs:sheep_" .. col[1], "mobs_animal:sheep_" .. col[1])
end
mobs:spawn({
name = "mobs_animal:sheep_white",
nodes = {"default:dirt_with_grass", "ethereal:green_dirt"},
neighbors = {"group:grass"},
min_light = 14,
interval = 60,
chance = 8000, -- 15000
min_height = 0,
max_height = 200,
day_toggle = true,
})
mobs:alias_mob("mobs:sheep", "mobs_animal:sheep_white") -- compatibility
-- raw mutton
minetest.register_craftitem(":mobs:mutton_raw", {
description = S("Raw Mutton"),
inventory_image = "mobs_mutton_raw.png",
on_use = minetest.item_eat(2),
groups = {food_meat_raw = 1, food_mutton_raw = 1, flammable = 2},
})
-- cooked mutton
minetest.register_craftitem(":mobs:mutton_cooked", {
description = S("Cooked Mutton"),
inventory_image = "mobs_mutton_cooked.png",
on_use = minetest.item_eat(6),
groups = {food_meat = 1, food_mutton = 1, flammable = 2},
})
minetest.register_craft({
type = "cooking",
output = "mobs:mutton_cooked",
recipe = "mobs:mutton_raw",
cooktime = 5,
})

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 934 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 513 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 241 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 999 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 809 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 771 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 466 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 809 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 181 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 247 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 609 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 216 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 166 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 167 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 369 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 218 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 239 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 610 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 199 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 363 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 272 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 301 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 440 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 377 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 404 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 456 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 416 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 472 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 520 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 378 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 892 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 312 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 462 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 406 B

Some files were not shown because too many files have changed in this diff Show More