display_modpack/display_lib/API.md

3.1 KiB

Display Lib API

This document describes Display Lib API. Display Lib allows to add a dynamic display on a node. Node must be wallmounted and Display Lib limits its rotation to vertical positions.

Provided methods

update_entities

display_lib.update_entities(pos)

This method triggers entities update for the display node at pos. Actual entity update is made by on_display_update callback associated to the entity.

pos: Position of the node

register_display_entity

display_lib.register_display_entity(entity_name)

This is a helper to register entities used for display.

entity_name: Name of the entity to register.

Provided callback implementations

on_place

display_lib.on_place(itemstack, placer, pointed_thing)

On_place node callback implementation. Display nodes should have this callback (avoid placement of horizontal display node).

on_construct

display_lib.on_construct(pos)

On_construct node callback implementation. Display nodes should have this callback (creates, places and updates display entities on node construction).

on_destruct

display_lib.on_destruct(pos)

On_destruct node callback implementation. Display nodes should have this callback (removes display entities on node destruction).

on_rotate

display_lib.on_rotate(pos, node, user, mode, new_param2)

On_rotate node callback implementation. Display nodes should have this callback (restricts rotations and rotates display entities associated with node).

on_activate

display_lib.on_activate(entity, staticdata)

On_activate entity callback implementation for display entities. No need of this method if display entities have been registered using register_display_entity (callback is already set).

Howto register a display node

  • Register display entities with register_display_entity
  • Register node with :
    • on_place, on_construct, on_destruct and on_rotate callbacks using display_lib callbacks.
    • a display_entities field in node definition containing a entity name indexed table. For each entity, two fields : depth indicates the entity position (-0.5 to 0.5) and on_display_update is a callback in charge of setting up entity texture.

Example

	display_lib.register_display_entity("mymod:entity1")
	display_lib.register_display_entity("mymod:entity2")

	function my_display_update1(pos, objref) 
		objref:set_properties({ textures= {"mytexture1.png"},
								visual_size = {x=1, y=1} })
	end

	function my_display_update2(pos, objref) 
		objref:set_properties({ textures= {"mytexture2.png"},
								visual_size = {x=1, y=1} })
	end

	minetest.register_node("mymod:test_display_node", {
		...
		paramtype2 = "wallmounted",
		...
		display_entities = {
			["mymod:entity1"] = { depth = -0.3, 
				on_display_update = my_display_update1},
			["mymod:entity1"] = { depth = -0.2, 
				on_display_update = my_display_update2},
		},
		...
		on_place = display_lib.on_place,
		on_construct = display_lib.on_construct,
		on_destruct = display_lib.on_destruct,
		on_rotate = display_lib.on_rotate,
		...
	})