Skip to main content

HarvestableClass

A harvestable class is instanced for every Harvestable in the game.

A tree or a plant that can be harvested is a typical case of a harvestable.

The class can receive events sent with sm.event.sendToHarvestable.

Instance Members

These members are set by the engine when instantiating the script class and are unique to each new instance of it.

harvestable

self.harvestable (Harvestable):
The harvestable that owns this script instance.


network

self.network (Network):
A network interface, for client/server instance communication.


storage

self.storage (Storage):
A data storage interface, used to store persistent data into the save file.


data

self.data (nil/boolean/number/string/table):
JSON data parsed from the data key in the harvestable's JSON file entry.


params

self.params (any):
Parameter passed to sm.harvestable.createHarvestable or set in the terrain generation script.


Class Constants

These constants may be set in the global script class table to configure certain parts of the class.
Note that changing these on an already-existing script instance will not update the settings.

poseWeightCount

HarvestableClass.poseWeightCount (int):
Sets the number of animation poses the harvestable's model is able to use.
Value are integers 0-3 (defaults to 0, no poses).
A value greater that 0 indicates that the renderable's mesh is set up to blend into pose0, pose1, pose2.


Server Callbacks

These callbacks are executed in server context.

server_onProjectile

function HarvestableClass.server_onProjectile(self, position, airTime, velocity, projectileName, shooter, damage, customData, normal, uuid)
end

Called when the Harvestable is hit by a projectile.

note

If the shooter is destroyed before the projectile hits, the shooter value will be nil.

Parameters:

  • self (table): The script class instance.
  • position (Vec3): The projectile hit world position.
  • airTime (number): The time, in seconds, that the projectile spent flying before the hit.
  • velocity (Vec3): The impact velocity of the projectile.
  • projectileName (string): The name of the projectile (legacy, use uuid instead).
  • shooter (Player/Unit/Shape/Harvestable/nil): The source/owner of the projectile.
  • damage (int): The projectile's damage value.
  • customData (any): Custom data defined with the custom* functions in sm.projectile.
  • normal (Vec3): The hit point normal vector.
  • uuid (Uuid): The UUID of the projectile.

server_onCollision

function HarvestableClass.server_onCollision(self, other, position, selfPointVelocity, otherPointVelocity, normal)
end

Called when the Harvestable collides with another object.

Parameters:

  • self (table): The script class instance.
  • other (Shape/Character/Harvestable/Lift/nil): The other object. Nil if terrain.
  • position (Vec3): The hit world position.
  • selfPointVelocity (Vec3): The harvestable's velocity at the collision hit point.
  • otherPointVelocity (Vec3): The other object's velocity at the collision hit point.
  • normal (Vec3): The collision normal between the two objects.

server_onMelee

function HarvestableClass.server_onMelee(self, position, attacker, damage, power, direction, normal)
end

Called when the Harvestable is hit by a melee attack.

note

If the attacker is destroyed before the hit lands, the attacker value will be nil.

Parameters:

  • self (table): The script class instance.
  • position (Vec3): The hit world position.
  • attacker (Player/Unit/nil): The source/owner of the attack.
  • damage (int): The attack's damage value.
  • power (number): The physical impact strength of the hit.
  • direction (Vec3): The direction of the attack.
  • normal (Vec3): The hit point normal vector.

server_canErase

function HarvestableClass.server_canErase(self)
return true -- or false
end

Called to check if the Harvestable can be erased by players at this moment.
This defaults to the removable JSON value in the harvestableset, which defaults to false.

Parameters:

  • self (table): The script class instance.

Returns:

  • boolean: Whether the harvestable can be erased or not.

server_onUnload

function HarvestableClass.server_onUnload(self)
end

Called when the Harvestable is unloaded from the world due to its surrounding terrain being unloaded.
This happens when no Player's Character is close enough to it.

Parameters:

  • self (table): The script class instance.

server_onReceiveUpdate

function HarvestableClass.server_onReceiveUpdate(self)
end

Called in random intervals on all loaded Harvestables to indicate some time has passed.
This interval is random, and random across different harvestables.
Multiple harvestables may receive an update at the same time and interval, but this is not guaranteed.
After each update, a new random time is chosen, after which the next update will be triggered.

For performance reasons, it is recommended to use this instead of server_onFixedUpdate, if the update does not need to happen frequently.

sm.game.getCurrentTick can be used to determine the time between updates.

Parameters:

  • self (table): The script class instance.

server_onExplosion

function HarvestableClass.server_onExplosion(self, center, destructionLevel)
end

Called when the Harvestable is hit by an explosion.

Parameters:

  • self (table): The script class instance.
  • center (Vec3): The center position of the explosion.
  • destructionLevel (int): The destruction level of the explosion. Corresponds to the durability rating of a shape.

server_onRemoved

function HarvestableClass.server_onRemoved(self, player)
end

Called when a Player attempts to remove the Harvestable.

note

The harvestable script is responsible for the actual removal, using Harvestable:destroy().

Parameters:

  • self (table): The script class instance.
  • player (Player): The player that attempted to remove the harvestable.

Client Callbacks

These callbacks are executed in client context.

client_onProjectile

function HarvestableClass.client_onProjectile(self, position, airTime, velocity, projectileName, shooter, damage, customData, normal, uuid)
end

Called when the Harvestable is hit by a projectile.

note

If the shooter is destroyed before the projectile hits, the shooter value will be nil.

Parameters:

  • self (table): The script class instance.
  • position (Vec3): The projectile hit world position.
  • airTime (number): The time, in seconds, that the projectile spent flying before the hit.
  • velocity (Vec3): The impact velocity of the projectile.
  • projectileName (string): The name of the projectile (legacy, use uuid instead).
  • shooter (Player/Shape/Harvestable/nil): The source/owner of the projectile.
  • damage (int): The projectile's damage value.
  • customData (any): Custom data defined with the custom* functions in sm.projectile.
  • normal (Vec3): The hit point normal vector.
  • uuid (Uuid): The UUID of the projectile.

client_onCollision

function HarvestableClass.client_onCollision(self, other, position, selfPointVelocity, otherPointVelocity, normal)
end

Called when the Harvestable collides with another object.

Parameters:

  • self (table): The script class instance.
  • other (Shape/Character/Harvestable/Lift/nil): The other object. Nil if terrain.
  • position (Vec3): The hit world position.
  • selfPointVelocity (Vec3): The harvestable's velocity at the collision hit point.
  • otherPointVelocity (Vec3): The other object's velocity at the collision hit point.
  • normal (Vec3): The collision normal between the two objects.

client_onMelee

function HarvestableClass.client_onMelee(self, position, attacker, damage, power, direction, normal)
end

Called when the Harvestable is hit by a melee attack.

note

If the attacker is destroyed before the hit lands, the attacker value will be nil.

Parameters:

  • self (table): The script class instance.
  • position (Vec3): The hit world position.
  • attacker (Player/nil): The source/owner of the attack.
  • damage (int): The attack's damage value.
  • power (number): The physical impact strength of the hit.
  • direction (Vec3): The direction of the attack.
  • normal (Vec3): The hit point normal vector.

client_canErase

function HarvestableClass.client_canErase(self)
return true -- or false
end

Called to check if the Harvestable can be erased by players at this moment.

Parameters:

  • self (table): The script class instance.

Returns:

  • boolean: Whether the harvestable can be erased or not.

client_canInteract

function HarvestableClass.client_canInteract( self, character )
return true -- or false
end

Called to check whether the Harvestable can be interacted with at this moment.

note

This callback is also responsible for updating the interaction text shown to the player using sm.gui.setInteractionText().

Parameters:

  • self (table): The script class instance.
  • character (Character): The character of the player that is looking at the shape.

Returns:

  • boolean: Whether the harvestable can be interacted with or not.

client_onInteract

function HarvestableClass.client_onInteract(self, character, state)
end

Called when a Player is interacting with the Harvestable by pressing the Use input (default: E).

Parameters:

  • self (table): The script class instance.
  • character (Character): The interacting player's character.
  • state (boolean): The interaction state (true = pressed, false = released).

client_onAction

function HarvestableClass.client_onAction(self, action, state)
end

Called when the Harvestable receives input from a Player with the Character locked to the Harvestable.

Details about the action value are in sm.interactable.actions.

Parameters:

  • self (table): The script class instance.
  • action (int): The action ID.
  • state (boolean): The action state (true = begin, false = end).