+
+
Module cmi
+
The Common Mob Interface
+
+
Info:
+
+
+
+
+
+
+
+
+
+
+
+
+ attack (mob, puncher, time_from_last_punch, tool_capabilities, direction, attacker) |
+ Attack a mob. |
+
+
+ damage_calculator (mob, puncher, time_from_last_punch, tool_capabilities, direction, attacker) |
+ Punch damage calculator. |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Types
+
+
+ The various data structures used in the API.
+
+ -
+
+ Id
+
+ -
+ Object Identifiers.
+
+
+
Fields:
+
+ - type
+ string
+ Either "player" or "mob"
+
+ - identifier
+ string
+ For players, is a player name. For mobs, is a unique ID.
+
+
+
+
+
+
+
+
+ -
+
+ PunchCallback (mob, hitter, time_from_last_punch, tool_capabilities, dir, damage, attacker)
+
+ -
+ Punch callbacks.
+
+
+
Parameters:
+
+ - mob
+ ObjectRef
+
+
+ - hitter
+ optional ObjectRef
+
+
+ - time_from_last_punch
+ number
+
+
+ - tool_capabilities
+ tab
+
+
+ - dir
+ optional vector
+
+
+ - damage
+ number
+
+
+ - attacker
+ optional Id
+ Any indirect owner of the punch, for example a
+ player who fired an arrow.
+
+
+
+
+
+
+
+
+ -
+
+ DeathCause
+
+ -
+ Reasons a mob could die.
+ The type field determines what kind of cause a DeathCause is. It can be one
+ of those specified here, or a custom one provided by a mod. For custom types,
+ the fields should be specified by the mod introducing it.
+
+
+
Fields:
+
+ - type
+ string
+ The predefined types are "punch" and "environment".
+
+ - puncher
+ optional ObjectRef
+ If type == "punch", contains the puncher. The
+ puncher can be nil.
+
+ - attacker
+ optional Id
+ If type == "punch", contains the attacker if it exists
+ and is known.
+
+ - pos
+ optional vector
+ If type == "environment", is the position of the damaging
+ node.
+
+ - node
+ optional node
+ If type == "environment", describes the damaging node.
+
+
+
+
+
+
+
+
+ -
+
+ DeathCallback (mob, cause)
+
+ -
+ Death callbacks.
+
+
+
Parameters:
+
+ - mob
+ ObjectRef
+ the dying mob
+
+ - cause
+ DeathCause
+ cause of death
+
+
+
+
+
+
+
+
+ -
+
+ ActivationCallback (mob, dtime)
+
+ -
+ Activation callbacks.
+
+
+
Parameters:
+
+ - mob
+ ObjectRef
+ the mob being activated
+
+ - dtime
+ number
+ the time since the mob was unloaded
+
+
+
+
+
+
+
+
+ -
+
+ StepCallback (mob, dtime)
+
+ -
+ Step callbacks.
+
+
+
Parameters:
+
+ - mob
+ ObjectRef
+
+
+ - dtime
+ number
+
+
+
+
+
+
+
+
+
+ -
+
+ ComponentDef
+
+ -
+ Component definitions.
+
+
+
Fields:
+
+ - name
+ string
+ a unique name for the component, prefixed with the mod name
+
+ - initialize
+ func
+ a function taking no arguments and returning a new instance
+ of the data
+
+ - serialize
+ func
+ a function taking your component's data as an input and
+ returning it serialized as a string
+
+ - deserialize
+ func
+ a function taking the serialized form of your data and
+ turning it back into the original data
+
+
+
+
+
+
+
+
+
+
Callback Registration
+
+
+ Functions for registering mob callbacks.
+
+ -
+
+ register_on_punchmob (func)
+
+ -
+ Register a callback to be run when a mob is punched.
+
+
+
Parameters:
+
+
+
+
+
+
+
+ -
+
+ register_on_diemob (func)
+
+ -
+ Register a callback to be run when a mob dies.
+
+
+
Parameters:
+
+
+
+
+
+
+
+ -
+
+ register_on_activatemob (func)
+
+ -
+ Register a callback to be run when a mob is activated.
+
+
+
Parameters:
+
+
+
+
+
+
+
+ -
+
+ register_on_stepmob (func)
+
+ -
+ Register a callback to be run on mob step.
+
+
+
Parameters:
+
+
+
+
+
+
+
+
+
Querying
+
+
+ Functions for getting information about mobs.
+
+ -
+
+ is_mob (object)
+
+ -
+ Checks if an object is a mob.
+
+
+
Parameters:
+
+ - object
+ ObjectRef or luaentity
+
+
+
+
+ Returns:
+
+
+ bool
+ true if the object is a mob, otherwise returns a falsey value
+
+
+
+
+
+
+ -
+
+ get_mob_description (object)
+
+ -
+ Gets a player-readable mob name.
+
+
+
Parameters:
+
+ - object
+ ObjectRef or luaentity
+
+
+
+
+ Returns:
+
+
+ string
+
+
+
+
+
+
+
+
+
Health-related
+
+
+ Functions related to hurting or healing mobs.
+
+ -
+
+ attack (mob, puncher, time_from_last_punch, tool_capabilities, direction, attacker)
+
+ -
+ Attack a mob.
+ Functions like the punch method of ObjectRef, but takes an additional optional
+ argument for an indirect attacker. Also works on non-mob entities that define
+ an appropriate _cmi_attack method.
+
+
+
Parameters:
+
+ - mob
+ ObjectRef or luaentity
+
+
+ - puncher
+ ObjectRef
+
+
+ - time_from_last_punch
+ number
+
+
+ - tool_capabilities
+ tab
+
+
+ - direction
+ vector
+
+
+ - attacker
+ optional Id
+ An indirect owner of the punch. For example, the player
+ who fired an arrow that punches the mob.
+
+
+
+
+
+
+
+
+ -
+
+ damage_calculator (mob, puncher, time_from_last_punch, tool_capabilities, direction, attacker)
+
+ -
+ Punch damage calculator.
+ By default, this just calculates damage in the vanilla way. Switch it out for
+ something else to change the default damage mechanism for mobs.
+
+
+
Parameters:
+
+ - mob
+ ObjectRef
+
+
+ - puncher
+ optional ObjectRef
+
+
+ - time_from_last_punch
+ number
+
+
+ - tool_capabilities
+ table
+
+
+ - direction
+ optional vector
+
+
+ - attacker
+ optional Id
+
+
+
+
+ Returns:
+
+
+ number
+ The calculated damage
+
+
+
+
+
+
+
+
Components
+
+
+ Components are data stored in a mob, that every mob is guaranteed to contain.
+ You can use them in conjunction with callbacks to extend mobs with new
+ functionality, without explicit support from mob mods.
+
+ -
+
+ register_component (component_def)
+
+ -
+ Register a mob component.
+
+
+
Parameters:
+
+
+
+
+
+
+
+ -
+
+ get_mob_component (ObjectRef, component_name)
+
+ -
+ Get a component from a mob.
+
+
+
Parameters:
+
+ - ObjectRef
+ mob
+ |luaentity mob
+
+ - component_name
+ string
+
+
+
+
+ Returns:
+
+
+ The requested component, or nil if it doesn't exist
+
+
+
+
+
+
+ -
+
+ set_mob_component (ObjectRef, component_name, new_value)
+
+ -
+ Set a component in a mob.
+
+
+
Parameters:
+
+ - ObjectRef
+ mob
+ |luaentity mob
+
+ - component_name
+ string
+
+
+ - new_value
+
+
+
+
+
+
+
+
+
+
+
Unique Ids
+
+
+ Every mob gets a unique ID when they are created. This feature is implemented
+ as a component, so you can use it as an example.
+
+ -
+
+ get_uid (mob)
+
+ -
+ Get the unique ID of a mob.
+
+
+
Parameters:
+
+ - mob
+ ObjectRef or luaentity
+
+
+
+
+ Returns:
+
+
+ string
+
+
+
+
+
+
+
+
+
Implementation: event notification
+
+
+ Functions used to notify CMI when things happen to your mob. Only necessary
+ when you are implementing the interface.
+
+ -
+
+ notify_punch (mob, hitter, time_from_last_punch, tool_capabilities, dir, damage, attacker)
+
+ -
+ Notify CMI that your mob has been punched.
+ Call this before doing any punch handling that is not "read-only".
+
+
+
Parameters:
+
+ - mob
+ ObjectRef
+
+
+ - hitter
+ optional ObjectRef
+
+
+ - time_from_last_punch
+ number
+
+
+ - tool_capabilities
+ tab
+
+
+ - dir
+ optional vector
+
+
+ - damage
+ number
+
+
+ - attacker
+ optional Id
+
+ unknown.
+
+
+
+ Returns:
+
+
+ Returns true if punch handling should be aborted.
+
+
+
+
+
+
+ -
+
+ notify_die (mob, cause)
+
+ -
+ Notify CMI that your mob has died.
+ Call this right before calling remove.
+
+
+
Parameters:
+
+ - mob
+ ObjectRef
+ the dying mob
+
+ - cause
+ DeathCause
+ cause of death
+
+
+
+
+
+
+
+
+ -
+
+ notify_activate (mob, dtime)
+
+ -
+ Notify CMI that your mob has been activated.
+ Call this after all other mob initialization.
+
+
+
Parameters:
+
+ - mob
+ ObjectRef
+ the mob being activated
+
+ - dtime
+ number
+ the time since the mob was unloaded
+
+
+
+
+
+
+
+
+ -
+
+ notify_step (mob, dtime)
+
+ -
+ Notify CMI that your mob is taking a step.
+ Call this on every step. It is suggested to call it before or after all other
+ processing, to avoid logic errors caused by callbacks handling the same state
+ as your entity's normal step logic.
+
+
+
Parameters:
+
+ - mob
+ ObjectRef
+
+
+ - dtime
+ number
+
+
+
+
+
+
+
+
+
+
+
Implementation: components
+
+
+ Functions related to implementing entity components. Only necessary when you
+ are implementing the interface.
+
+ -
+
+ activate_components (serialized_data)
+
+ -
+ Activates component data.
+ On mob activation, call this and put the result in the _cmi_components field of
+ its luaentity.
+
+
+
Parameters:
+
+ - serialized_data
+ optional string
+ the serialized form of the string, if
+ available. If the mob has never had component data, do not pass this argument.
+
+
+
+ Returns:
+
+
+ component data
+
+
+
+
+
+
+ -
+
+ serialize_components (component_data)
+
+ -
+ Serialized component data.
+ When serializing your mob data, call this and put the result somewhere safe,
+ where it can be retrieved on activation to be passed to
+ #{activate_components}.
+
+
+
Parameters:
+
+
+ Returns:
+
+
+ string
+
+
+
+
+
+
+
+
+
Implementation: health
+
+
+ Functions related to health that are needed for implementation of the
+ interface. Only necessary if you are implementing the interface.
+
+ -
+
+ calculate_damage (mob, puncher, time_from_last_punch, tool_capabilities, direction, attacker)
+
+ -
+ Calculate damage.
+ Use this function when you want to calculate the "default" damage. If you
+ are a modder who wants to switch out the damage mechanism, do not replace
+ this function. Replace #{damage_calculator} instead.
+
+
+
Parameters:
+
+ - mob
+ ObjectRef
+
+
+ - puncher
+ optional ObjectRef
+
+
+ - time_from_last_punch
+ number
+
+
+ - tool_capabilities
+ table
+
+
+ - direction
+ optional vector
+
+
+ - attacker
+ optional Id
+
+
+
+
+ Returns:
+
+
+ number
+
+
+
+
+
+
+
+
+
+
+