10 KiB
API Documentation
How to read this document
If a function states multiple parameters of the same name then either of them has to be passed on function call. Look at the function signature to determine the order of required parameters. So far, all parameters are mandatory.
Custom Weather Registration
Register Weather Preset
climate_api.register_weather(name, conditions, effects)
Invoke this function in order to create and register a new weather preset. Presets control which effects are to be applied to a player under specific circumstances. As an example, a preset for rain could require a high level of humidity and apply particle and sound effects.
Parameters:
name <string>
: A unique identifier resembling the new weather preset. Should be prefixed with the mod's name in a way that could look likemymod:awesome_weather
. This name should only be used once.conditions <table>
: An associative array that checks weather influences for specified values. Keys should be the name of an influence, values should be of matching type for repective influence. Keys can be prefixed withmin_
to accept any value equal or higher than influence value. A prefix ofmax_
will accept any value lesser than influence value. A prefix ofhas_
can be used in conjunction with a numeric array as a value. It will accept any influence value that is present in the specified table. Omitting a prefix will accept the specified value only. All table entries have to be matched positively for the weather preset to be applied.conditions <function>
: For more control, a function can be specified instead of a conditions table. The function will receive a table as its first parameter, consisting of key-value pairs indicating the current value for each weather influence. The function is expected to return true if the weather preset is to be applied or false otherwise.effects <table>
: An associative array indicating which weather effects are to be applied whenever the weather preset is active. The key should be a registered weather effect name. The value will be passed as a parameter to the effect. Look at the documentation of individual effects to determine valid values.effects <function>
: A generator function that returns a set of weather effects and its parameters. This function will receive a table as its first parameter, consisting of key-value pairs indicating the current value for each weather influence. It is expected to return a table in the same fashion aseffects <table>
would have looked like.
Returns: nil
Register Weather Effect
climate_api.register_effect(name, handler, htype)
Parameters:
name <string>
: A unique identifier resembling the new weather effect. Should be prefixed with the mod's name in a way that could look likemymod:special_effect
. Call this function multiple times with the same name in order to apply multiple handler methods to the same effect.handler <function>
: This function will be called whenever players are affected by the registered effect. It receives a single parameter containing an accociative array. The keys represent player names and the values represent the set of applied preset parameters. This set is an accociative array as well with the keys representing the names of applied weather presets and the values representing the supplied data from those presets. This parameter could look like this:{ singleplayer = {"mymod:awesome_weather" = "a", "mymod:amazing_weather" = "b"} }
. Ifhtype
istick
then the list of players represents all currently affected players. If it isstart
orend
then the list contains all players going though that change.htype <"start" | "tick" | "end">
: Determines when the handler will be called.start
results in a callback whenever an effect is applied to at least one player, meaning that the very first weather preset applies it.tick
results in a callback every update cycle as long as at least one player has the effect from at least one preset.end
results in a callback whenever at least one player loses the effect completely.
Returns: nil
Set Update Cycle for Effect
climate_api.set_effect_cycle(name, cycle)
Parameters:
name <string>
: The identifier of a registered weather effectcycle <number>
: The minimal time between update calls to registered effect handlers in seconds. This value defaults toclimate_api.DEFAULT_CYCLE
(2.0s). Other values areclimate_api.SHORT_CYCLE
(0s) for frequent update calls (like for particle effects) andclimate_api.LONG_CYCLE
(5.0s) for ressource intensive tasks and timed effects (like lightning strikes). You can also use any other custom number representing the amount of time in seconds.
Returns: nil
Register Global Environment Influence
climate_api.register_global_influence(name, func)
Parameters:
name <string>
A unique name identifying the registered influencefunc <function>
: A generator function that returns some value which is in turn supplied to weather presets and can be used as a condition.
Returns: nil
Register Local Environment Influence
climate_api.register_influence(name, func)
Parameters:
name <string>
A unique name identifying the registered influencefunc <function>
: A generator function that returns some value which is in turn supplied to weather presets and can be used as a condition. This function will receive a vector as its single parameter indicating the current position.
Returns: nil
Register Active Block Modifier
climate_api.register_abm(config)
Environment Access
Get Temperature At Position
climate_api.environment.get_heat(pos)
Parameter: pos <vector>
: Coordinates of requested location
Returns: <number>
indicating current temperature in °F
Get Humidity At Position
climate_api.environment.get_humidity(pos)
Parameter: pos <vector>
: Coordinates of requested location
Returns: <number>
indicating current humidity
Get Current Windspeed
climate_api.environment.get_wind(pos)
Parameter: pos <vector>
: Coordinates of requested location. Right now, only y-coordinate is used.
Returns: <vector>
indicating speed and direction
Get Active Weather Presets
climate_api.environment.get_weather_presets(player)
Get Active Weather Effects
climate_api.environment.get_effects(player)
Skybox Modification
Add Sky Configuration Layer
climate_api.skybox.add(playername, name, sky)
Remove Sky Configuration Layer
climate_api.skybox.remove(playername, name)
Update Player Sky
climate_api.skybox.update(playername)
Player Physics Modifications
Climate API provides an easy way of modfying player physics in a compatible way.
The API is similar to those of player_monoids
or playerphysics
because it also uses multiplication to account for multiple modifiers.
In fact, these functions use player_monoids
under the hud if that mod is available. If not, they will fall back to playerphysics
, pova
, or native overrides in that order.
Add Physics Modifier
climate_api.player_physics.add(id, player, effect, value)
Register a new modifier that will be multiplied with the current value to set the new physics factor. Call this function again with the same id in order to change an existing modifier.
Parameters:
id <string>
: A unique name used to identify the modifier. Should be prefixed with the mod's name.player <ObjectRef>
: The player affected by the physics changeeffect <"speed" | "jump" | "gravity">
: The type of physics to be changedvalue <number>
: The multiplicator. Use values between 0 and 1 to reduce physics attribute. Use values above 1 to increase it.
Returns: nil
Remove Physics Modifier
climate_api.player_physics.remove(id, player, effect)
Use this function to completely remove a physics modifer from the attribute calculation.
Parameters:
id <string>
: The name used inplayer_physics.add
that identifies a registered modifierplayer <ObjectRef>
: The player affected by the physics changeeffect <"speed" | "jump" | "gravity">
: The type of physics to be changed
Returns: nil
Utility Functions
Merge Tables
climate_api.utility.merge_tables(a, b)
This function will merge two given accociative tables and return the result.
If in conflict, attributes of table B will override those of table A.
This is especially useful when assigning default values to a specified configuration with possibly missing entries.
Note that this function will also modify table A. If you want to prevent that, you should copy the table first: climate_api.utility.merge_tables(table.copy(a), b)
.
Parameters:
a <table>
: The base table consisting of default values or other datab <table>
: The prioritized table to merge with, and possibly override A
Returns: <table>
consisting of all attributes from A and B.
Limit Numeric Boundaries
climate_api.utility.rangelim(value, min, max)
This function will return the specified value if it falls in range between minimum and maximum. Otherwise, it will return the closest boundary.
Parameter:
value <number>
: The number to check and returnmin <number>
: The lower boundarymax <number>
: The upper boundary
Returns: <number>
being either the value or the closest boundary
Statistical Sigmoid Function
climate_api.utility.sigmoid(value, max, growth, midpoint)
This method provides a logistic function that will result in growing return values for greater input values. The resulting function graph will look like an S and fall in range between 0
and max
. You can adjust the curve by specifying growth rate and midpoint.
Parameters:
value <number>
: x value supplied to the functionmax <number>
: Maximum return valuegrowth <number>
: Logistic growth ratemidpoint <number>
Return value forvalue = 0
and function midpoint
Returns: <number>
indicating y coordinate of logistic function
Normalized Sinus Cycle
climate_api.utility.normalized_cycle(value)
This function provides an easy way to generate a simple curve with a maximal turning point of y = 1
located at value = 0
and the lowest points of y = 0
at value = +/- 1
.
Parameter: value <number>
: The supplied x coordinate
Returns: <number>
indicating resulting y coordinate between 0
and 1
.