🧮 Math#
glib.math:
: The “Math” functions, as their name suggests, are for
doing math. Before you run away remembering your indigestible and
incomprehensible lessons that you had to endure at school, you should
know that here, you won’t need to do any math (in fact, it’s the purpose
of the lib to simplify your life). Nevertheless, the following math
functions are theoretical, but they are also what most other systems are
based on. If you don’t know what I mean, you can easily create (among
other things) raycasting with this lib. This system is essentially based
on trigonometry. But again, nothing complicated, everything is already
done ;)
Algebra#
glib.math:algebra
: this folder allows you to perform algebra
operations
Basic rotation#
basis_rotation_3d
: Allows to obtain the equivalent of the vector
passed in parameter in a base with a different orientation. Useful to
convert an absolute/relative position into a local position for a given
entity.
Takes in parameter the scores
glib.var[0,1,2]
corresponding to the X, Y and Z compositors of the vector in the starting baseTakes as parameter the scores
glib.var[3,4]
corresponding to the difference in orientation of the bases, respectively horizontal (Phi) and vertical (Theta)Returns the X’, Y’ and Z’ components respectively on the scores
glib.res[0,1,2]
Examples:
A block is in ~2 ~5 ~10 from me, I want to have this position in local coordinate (^? ^? ^?)
# One time # Relative coordinates (we multiply by 1000 to have more precision on the result, which will also be multiplied by 1000) scoreboard players set @s glib.var0 2000 scoreboard players set @s glib.var1 5000 scoreboard players set @s glib.var2 10000 # Difference between my orientation (= that of the coondata grid ^X ^Y ^Z) and the orientation of the Minecraft blocks grid (~X ~Y ~Z) function glib.orientation:get scoreboard players operation @s glib.var3 = @s glib.oriH scoreboard players operation @s glib.var4 = @s glib.oriV # Perform the basic rotation function glib.math:algebra/basis_rotation_3d # See the result tellraw @a [{"text": "X = ", "color": "dark_gray"},{"score":{"name":"@s", "objective": "glib.res0"}, "color": "gold"},{"text":", Y = ", "color": "dark_gray"},{"score":{"name":"@s", "objective": "glib. res1"},"color":"gold"},{"text":", Z = ","color":"dark_gray"},{"score":{"name":"@s","objective":"glib.res2"},"color":"gold"}]
I want to have a vector pointing to where I’m looking, but in relative coordinates ~X ~Y ~Z (also called “classical” vector in this library)
# Once # Retrieve a vector ^ ^ ^1 corresponding to a vector directed according to the orientation of the entity (we multiply by 1000 to have more precision on the result, which will also be multiplied by 1000) scoreboard players set @s glib.var0 0 scoreboard players set @s glib.var1 0 scoreboard players set @s glib.var2 1000 # Get the orientation function glib.orientation:get scoreboard players operation @s glib.var3 = @s glib.oriH scoreboard players operation @s glib.var4 = @s glib.oriV # Reversal of the orientation since we want to have the relative orientation of the game grid compared to the orientation of the player (unlike the previous example) scoreboard players operation @s glib.var3 *= -1 glib.const scoreboard players operation @s glib.var4 *= -1 glib.const # Perform the basic rotation function glib.math:algebra/basis_rotation_3d # See the result tellraw @a [{"text": "X = ", "color": "dark_gray"},{"score":{"name":"@s", "objective": "glib.res0"}, "color": "gold"},{"text":", Y = ", "color": "dark_gray"},{"score":{"name":"@s", "objective": "glib. res1"},"color":"gold"},{"text":", Z = ","color":"dark_gray"},{"score":{"name":"@s","objective":"glib.res2"},"color":"gold"}]
Bitwise#
glib.math:bitwise
: This folder contains various bitwise operators to
apply to scores.
logical AND#
and
: Computes the bitwise conjunction of the two input numbers
Takes the scores
glib.var0
andglib.var1
as parametersReturns the value of the operation
glib.var0 & glib.var1
on the scoreglib.res0
.If one of the inputs is negative, the operation will be done between the first operand and the two’s complement of the second
Example:
Calculate and display -9 & 57
# Once scoreboard players set @s glib.var0 -9 scoreboard players set @s glib.var1 57 function glib.math:bitwise/and tellraw @a [{"text":"-9 & 57 = ", "color": "dark_gray"},{"score":{"name":"@s", "objective": "glib.res0"}, "color": "gold"}]
Get number of bits#
get_number_of_bits
: Calculates the number of bits needed to store
the input
Takes the score
glib.var0
as parameterReturns the number of bits needed to store the input
If the input is negative, returns the number of bits needed to store the absolute value of the number
Example:
Calculate and display the number of bits of 12
# Once scoreboard players set @s glib.var0 12 function glib.math:bitwise/get_number_of_bits tellraw @a [{"text": "Number of bits of 12 = ", "color": "dark_gray"},{"score":{"name":"@s", "objective": "glib.res0"}, "color": "gold"}]
logical NOT#
not
: Computes the bit by bit negation of the input
Takes the score
glib.var0
as parameterReturns the value of the operation
~glib.var0
on the scoreglib.res0
.
Example:
Calculate and display ~452
# Once scoreboard players set @s glib.var0 452 function glib.math:bitwise/not tellraw @a [{"text":"~452 = ", "color": "dark_gray"},{"score":{"name":"@s", "objective": "glib.res0"}, "color": "gold"}]
OR logic#
or
: Computes the bit to bit disjunction of the two input numbers
Takes as parameters the scores
glib.var0
andglib.var1
.Returns the value of the operation
glib.var0 | glib.var1
on the scoreglib.res0
.If one of the inputs is negative, the operation will be done between the first operand and the two’s complement of the second
Example:
Calculate and display -9 | 57.
# Once scoreboard players set @s glib.var0 -9 scoreboard players set @s glib.var1 57 function glib.math:bitwise/gold tellraw @a [{"text":"-9 | 57 = ", "color": "dark_gray"},{"score":{"name":"@s", "objective": "glib.res0"}, "color": "gold"}]
Complement to 2#
two_complement
: Computes the two’s complement of the input
Takes the score
glib.var0
as parameterReturns the two’s complement of
glib.var0
over the scoreglib.res0
.
Example:
Calculate and display the two’s complement of 12
# Once scoreboard players set @s glib.var0 12 function glib.math:bitwise/to_complement tellraw @a [{"text": "Two's complement of 12 = ", "color": "dark_gray"},{"score":{"name":"@s", "objective": "glib.res0"}, "color": "gold"}]
OR exclusive#
xor
: Computes the exclusive bit by bit disjunction of the two input
numbers
Takes as parameters the scores
glib.var0
andglib.var1
.Returns the value of the operation
glib.var0 ^ glib.var1
on the scoreglib.res0
If one of the inputs is negative, the operation will be done between the first operand and the two’s complement of the second
Example:
Calculate and display -9 ^ 57
# Once scoreboard players set @s glib.var0 -9 scoreboard players set @s glib.var1 57 function glib.math:bitwise/xor tellraw @a [{"text":"-9 ^ 57 = ", "color": "dark_gray"},{"score":{"name":"@s", "objective": "glib.res0"}, "color": "gold"}]
Common#
glib.math:common/
: this folder contains the usual math functions
Rounded division#
divide
: Allows you to divide one number by another by rounding the
result to the nearest whole number (where Minecraft rounds down to the
next whole number).
Takes as input the scores
glib.var0
andglib.var1
Returns the result on the score
glib.res0
Example:
Calculate 9 / 5:
# Once scoreboard players set @s glib.var0 9 scoreboard players set @s glib.var1 5 function glib.math:common/divide tellraw @a [{"text": "9 / 5 = ", "color": "dark_gray"},{"score":{"name":"@s", "objective": "glib.res0"}, "color": "gold"}]
Exponential#
exp
: Compute the exponential of the number passed in parameter on
the score glib.var0
and return the result on the score glib.res0
In order to take into account a certain number of decimals,
glib.var0
must be multiplied by 100 andglib.res0
is multiplied by 1000Due to technical constraints, this system is limited to a glib.var0 within an interval of
[-6000,12000]
(i.e.[-6;12]
in real value)
Example:
Calculate exp(3):
# Once scoreboard players set @s glib.var0 300 function glib.math:common/exp tellraw @a [{"text":"exp(3)*10^3 = ","color":"dark_gray"},{"score":{"name":"@s","objective":"glib.res0"},"color":"gold"}]
Factorial#
factorial
: Compute the factorial of the number passed in parameter
on the score glib.var0
and return the result on the score
glib.res0
.
Example:
Compute 3!
# Once scoreboard players set @s glib.var0 3 function glib.math:common/factorial tellraw @a [{"text": "3! = ","color":"dark_gray"},{"score":{"name":"@s","objective":"glib.res0"},"color":"gold"}]
Greatest common denominator#
gcd
: Compute the greatest common denominator of the two numbers
passed in parameter on the scores glib.var0
and glib.var1
then
return the result on the score glib.res0
.
Example:
Calculate the greatest common denominator between 16 and 12 :
# Once scoreboard players set @s glib.var0 16 scoreboard players set @s glib.var1 12 function glib.math:common/gcd tellraw @a [{"text": "gcd(16,12) = ", "color": "dark_gray"},{"score":{"name":"@s", "objective": "glib.res0"}, "color": "gold"}]
Neperian logarithm#
log
: Compute the Neperian logarithm (base e) of the number passed in
parameter on the score glib.var0
and return the result on the score
glib.res0
.
For precision, the parameters of the function and the returned value are multiplied by 1000 in order to store 3 decimals
Example:
Calculate ln(28):
# Once scoreboard players set @s glib.var0 28000 function glib.math:common/log tellraw @a [{"text":"ln(28)*10^3 = ","color":"dark_gray"},{"score":{"name":"@s","objective":"glib.res0"},"color":"gold"}]
Logarithm in base 2#
log2
: Compute the logarithm in base 2 of the number passed in
parameter on the score glib.var0
and return the result on the score
glib.res0
.
For precision, the parameters of the function and the returned value are multiplied by 1000 in order to store 3 decimals
Example:
Calculate log2(28):
# Once scoreboard players set @s glib.var0 28000 function glib.math:common/log2 tellraw @a [{"text":"log2(28)*10^3 = ","color":"dark_gray"},{"score":{"name":"@s","objective":"glib.res0"},"color":"gold"}]
Logarithm in base 10#
log10
: Compute the logarithm in base 10 of the number passed in
parameter on the score glib.var0
and return the result on the score
glib.res0
.
For precision, the parameters of the function and the returned value are multiplied by 1000 in order to store 3 decimals
Example:
Calculate log10(28):
# Once scoreboard players set @s glib.var0 28000 function glib.math:common/log10 tellraw @a [{"text":"log10(28)*10^3 = ","color":"dark_gray"},{"score":{"name":"@s","objective":"glib.res0"},"color":"gold"}]
Logarithm in base a#
loga
: Computes the logarithm of the number passed in parameter on
the score glib.var0
using as base the name passed in parameter on
the score glib.var1
and returns the result on the score
glib.res0
For precision, the parameters of the function and the returned value are multiplied by 1000 in order to store 3 decimals
Example:
Calculate log4(28):
# Once scoreboard players set @s glib.var0 28000 scoreboard players set @s glib.var1 4 function glib.math:common/loga tellraw @a [{"text":"log4(28)*10^3 = ","color":"dark_gray"},{"score":{"name":"@s","objective":"glib.res0"},"color":"gold"}]
Power#
pow
: Compute the product of the number passed in parameter on the
score glib.var0
raised to the power of the number passed in
parameter on the score glib.var1
, then return the result on the
score glib.res0
Example:
Compute 2^6:
# Once scoreboard players set @s glib.var0 2 scoreboard players set @s glib.var1 6 function glib.math:common/pow tellraw @a [{"text": "2^6 = ", "color": "dark_gray"},{"score":{"name":"@s", "objective": "glib.res0"}, "color": "gold"}]
Square root#
sqrt
: Compute the square root of the number (ex: Sqrt(16) = 4
because 4^2 = 4x4 = 16)
Takes as parameter the score
glib.var0
greater than or equal to 0 (corresponding to a value with a precision of 1:1)Returns the value of the cosine on the score
glib.res0
greater than or equal to 0 (corresponding to a value with a precision of 1:1)
Example:
Calculate and display the square root of 42:
# Once scoreboard players set @s glib.var0 42 function glib.math:common/sqrt tellraw @a [{"text": "sqrt(42) = ", "color": "dark_gray"},{"score":{"name":"@s", "objective": "glib.res0"}, "color": "gold"}]
Special#
glib.math:special/
: this folder contains functions that are of
special interest in algortihms (but not or not much in formal
mathematics)
Retrieve the next power of 2#
get_next_pow2
: compute the power of 2 directly superior to the
number given in parameter on the score glib.var0
and return the
result on glib.res0
.
Example:
Find the power of 2 greater than 43
# Once scoreboard players set @s glib.var0 43 function glib.math:special/get_next_pow2 tellraw @a [{"text":"get_next_pow2(43) = ","color":"dark_gray"},{"score":{"name":"@s","objective":"glib.res0"},"color":"gold"}]
Random number generator#
random
: Generates a random number and returns the result on the
glib.res0
score
To reduce this interval, execute the function then do a “modulo” operation on the result (random % 10 -> the random number will be included in the interval [0;9])
Example:
Get and display a random number between 0 and 100:
# Once function glib.math:special/random scoreboard players operation @s glib.res0 %= 101 glib.const tellraw @a [{"text": "random() = ", "color": "dark_gray"},{"score":{"name":"@s", "objective": "glib.res0"}, "color": "gold"}] Beware: the score `glib.const` does not contain all possible values. Make sure the value you want to use exists and initialize it if necessary.
Trigonometry#
glib.math:trig/
: this folder contains basic trigonometry functions,
opening a lot of doors to creative possibilities in Minecraft.
Arccosinus#
arccos
: Calculate the arccosinus of a value between -1 and 1
Takes as parameter the score
glib.var0
between -1000 and 1000 (translating a value from -1 to 1 with a precision of 1:1000)Returns the value of the arccosine on the score
glib.res0
(corresponding to an angle with a precision of 1:1 degree)
Example:
Calculate and display the arccos of 0,42
# Once scoreboard players set @s glib.var0 420 function glib.math:trig/arccos tellraw @a [{"text":"arccos(0.42) = ","color":"dark_gray"},{"score":{"name":"@s","objective":"glib.res0"},"color":"gold"}]
Arcsinus#
arcsin
: Compute the arcsinus of a value between -1 and 1
Takes as parameter the score
glib.var0
between -1000 and 1000 (translating a value from -1 to 1 with a precision of 1:1000)Returns the value of the arcsine on the score
glib.res0
(corresponding to an angle with a precision of 1:1 degree)
Example:
Calculate and display the arcsinus of 0.42
# Once scoreboard players set @s glib.var0 420 function glib.math:trig/arcsin tellraw @a [{"text":"arcsin(0.42) = ","color":"dark_gray"},{"score":{"name":"@s","objective":"glib.res0"},"color":"gold"}]
Arctangent#
arctan
: Compute the arctangent of a value between -infinite and
+infinite
Takes as parameter the score
glib.var0
(translating a value with a precision of 1:1000)Returns the value of the arctangeant on the score
glib.res0
(corresponding to an angle with a precision of 1:1 degree)
Example:
Calculate and display the arctan of 0.42
# Once scoreboard players set @s glib.var0 420 function glib.math:trig/arctan tellraw @a [{"text":"arctan(0.42) = ","color":"dark_gray"},{"score":{"name":"@s","objective":"glib.res0"},"color":"gold"}]
Cosine#
cos
: Compute the cosine of an angle between 0 and 360
Takes as parameter the score
glib.var0
between 0 and 360 (corresponding to an angle with a precision of 1:1 degree)Returns the value of the cosine on the score
glib.res0
between -1000 and 1000 (translating a value from -1 to 1 with a precision of 1:1000)
Example:
Calculate and display the cosine of 42
# Once scoreboard players set @s glib.var0 42 function glib.math:trig/cos tellraw @a [{"text": "cos(42) = ", "color": "dark_gray"},{"score":{"name":"@s", "objective": "glib.res0"}, "color": "gold"}]
Sinus#
sin
: Computes the sine of an angle between 0 and 360
Takes as parameter the score
glib.var0
between 0 and 360 (corresponding to an angle with a precision of 1:1 degree)Returns the value of the sine on the score
glib.res0
between -1000 and 1000 (translating a value from -1 to 1 with a precision of 1:1000)
Example:
Calculate and display the sine of 42
# Once scoreboard players set @s glib.var0 42 function glib.math:trig/sin tellraw @a [{"text": "sin(42) = ", "color": "dark_gray"},{"score":{"name":"@s", "objective": "glib.res0"}, "color": "gold"}]
Tangent#
tan
: Compute the tangeant of an angle between 0 and 360
Takes as parameter the score
glib.var0
between 0 and 360 (corresponding to an angle with a precision of 1:1 degree)Returns the value of the tangeante on the score
glib.res0
between -infinite and +infinite (translating a value with a precision of 1:1000)
Example:
Calculate and display the tengeante of 42
# Once scoreboard players set @s glib.var0 42 function glib.math:trig/tan tellraw @a [{"text": "tan(42) = ", "color": "dark_gray"},{"score":{"name":"@s", "objective": "glib.res0"}, "color": "gold"}]