Registration ------------ creatura.register_mob(name, mob definition) Mob Definition uses almost all entity definition params { max_health = 10 -- Maximum Health damage = 0 -- Damage dealt by mob speed = 4 -- Maximum Speed tracking_range = 16 -- Maximum range for finding entities/blocks despawn_after = 1500 -- Despawn after being active for this amount of time max_fall = 8 -- How far a mob can fall before taking damage (set to 0 to disable fall damage) turn_rate = 7 -- Turn Rate in rad/s bouyancy_multiplier = 1 -- Multiplier for bouyancy effects (set to 0 to disable bouyancy) hydrodynamics_multiplier = 1 -- Multiplier for hydroynamic effects (set to 0 to disable hydrodynamics) hitbox = { -- Hitbox params (Uses custom registration to force get_pos() to always return bottom of box) width = 0.5, (total width = width * 2. A width of 0.5 results in a box with a total width of 1) height = 1 (total height of box) } animations = { anim = {range = {x = 1, y = 10}, speed = 30, frame_blend = 0.3, loop = true} } drops = { {name = (itemstring), min = 1, max = 3, chance = 1}, } follow = { "farming:seed_wheat", "farming:seed_cotton" } utility_stack = { -- Every second, all utilities in the stack are evaluated -- Whichever utilitiy's get_score function returns the highest number will be executed -- If multiple utilities have the same score, the one with the highest index is executed [1] = { `utility` -- name of utility to evaluate `get_score` -- function (only accepts `self` as an arg) that returns a number } } activate_func = function(self, staticdata, dtime_s) -- called upon activation step_func = function(self, dtime, moveresult) -- called every server step death_func = function(self) -- called when mobs health drops to/below 0 } Lua Entity Methods ------------------ `move(pos, method, speed, animation)` - `pos`: position to move to - `method`: method used to move to `pos` - `speed`: multiplier for `speed` - `animation`: animation to play while moving `halt()` - stops movement `turn_to(yaw[, turn_rate])` - `yaw`: yaw (in radians) to turn to - `turn_rate`: turn rate in rad/s (default: 10) -- likely to be deprecated `set_gravity(gravity)` - `gravity`: vertical acceleration rate `set_forward_velocity(speed)` - `speed`: rate in m/s to travel forward at `set_vertical_velocity(speed)` - `speed`: rate in m/s to travel vertically at `apply_knockback(dir, power)` - `dir`: direction vector - `power`: multiplier for dir `punch_target(target)` - applies 'damage' to 'target' `hurt(damage)` - `damage`: number to subtract from health (ignores armor) `heal(health)` - `health`: number to add to health `get_center_pos()` - returns position at center of hitbox `pos_in_box(pos[, size])` - returns true if 'pos' is within hitbox - `size`: width of box to check in (optional) `animate(anim)` - sets animation to `anim` `set_texture(id, tbl)` - `id`: table index - `tbl`: table of textures `set_scale(x)` - `x`: multiplier for base scale (0.5 sets scale to half, 2 sets scale to double) `fix_attached_scale(parent)` - sets scale to appropriate value when attached to 'parent' - `parent`: object `memorize(id, val)` -- stores `val` to staticdata - `id`: key for table - `val`: value to store `forget(id)` -- removes `id` from staticdata `recall(id)` -- returns value of `id` from staticdata `timer(n)` -- returns true avery `n` seconds `get_hitbox()` -- returns current hitbox `get_height()` -- returns current height `get_visual_size()` -- returns current visual size `follow_wielded_item(player)` -- returns itemstack, item name of `player`s wielded item if item is in 'follow' `get_target(target)` -- returns if `target` is alive, if mob has a line of sight with `target`, position of `target` Utilities --------- * `creatura.is_valid(mob)` * Returns false if object doesn't exist, otherwise returns ObjectRef/PlayerRef * `mob`: Luaentity, ObjectRef, or PlayerRef * `creatura.is_alive(mob)` * Returns false if object doesn't exist or is dead, otherwise returns ObjectRef/PlayerRef * `mob`: Luaentity, ObjectRef, or PlayerRef Environment access ------------------ * `creatura.get_node_height_from_def(name)` -- Returns total height of nodebox -- `name`: Itemstring/Name of node * `creatura.get_node_def(node)` -- Returns definition of node -- `node`: Itemstring/Name of node or position * `creatura.get_ground_level(pos, max_diff)` * Returns first position above walkable node within `max_diff` * `creatura.is_pos_moveable(pos, width, height)` * Returns true if a box with specified `width` and `height` can fit at `pos` * `width` should be the largest side of the collision box * Check from bottom of box * `creatura.fast_ray_sight(pos1, pos2, water)` * Checks for line of sight between `pos1 and `pos2` * Returns bool * Returns distance to obstruction * `creatura.sensor_floor(self, range, water)` * Finds distance to ground from bottom of entities hitbox * Returns distance to ground or `range` if no ground is found * `range`: Maximum range * `water`: If false, water will not be counted as ground * `creatura.sensor_ceil(self, range, water)` * Finds distance to ceiling from top of entities hitbox * Returns distance to ceiling or `range` if no ceiling is found * `range`: Maximum range * `water`: If false, water will not be counted as ceiling * `creatura.get_nearby_player(self)` * Finds player within `self.tracking_range` * Returns PlayerRef or nil * `creatura.get_nearby_players(self)` * Finds players within `self.tracking_range` * Returns table of PlayerRefs or empty table * `creatura.get_nearby_object(self, name)` * Finds object within `self.tracking_range` * Returns ObjectRef or nil * `name`: Name of object to search for * `creatura.get_nearby_objects(self, name)` * Finds objects within `self.tracking_range` * Returns table of ObjectRefs or empty table * `name`: Name of object to search for Global Mob API -------------- * `creatura.drop_items(self)` * Drops items from `self.drops` * `creatura.basic_punch_func(self, puncher, time_from_last_punch, tool_capabilities, direction, damage)` * Deals damage * Applies knockback * Visualy and audibly indicates damage