3D direction and velocity

Vector

A Vector is a simple 3D coordinate used for velocities, offsets, and directional calculations. Unlike Location, a Vector has no world, yaw, or pitch.


Constructor

Vector(x=0.0, y=0.0, z=0.0)

Create a vector.

velocity = Vector(0, 1.5, 0)       # Straight up
direction = Vector(0.5, 0.2, -0.3) # Angled

Attributes

x

X component.

y

Y component.

z

Z component.


Common Uses

Setting entity velocity

# Launch a player upward
await player.set_velocity(Vector(0, 2.0, 0))

Spawning projectiles with velocity

arrow = await world.spawn_projectile(
    player,
    "ARROW",
    velocity=Vector(0, 1, 0)
)

Arithmetic Operators

Vector supports +, -, and * operators for easy vector math.

Addition (+)

result = Vector(1, 2, 3) + Vector(4, 5, 6)   # Vector(5, 7, 9)
result = Vector(1, 2, 3) + [4, 5, 6]          # Vector(5, 7, 9)
result = Vector(1, 2, 3) + (4, 5, 6)          # Vector(5, 7, 9)

Supports Vector, list[3], and tuple[3] as the right operand.

Subtraction (-)

result = Vector(5, 7, 9) - Vector(1, 2, 3)    # Vector(4, 5, 6)
result = Vector(5, 7, 9) - [1, 2, 3]          # Vector(4, 5, 6)

Multiplication (*)

# Scalar multiplication
result = Vector(1, 2, 3) * 2      # Vector(2, 4, 6)
result = 2 * Vector(1, 2, 3)      # Vector(2, 4, 6)

# Component-wise multiplication
result = Vector(1, 2, 3) * Vector(4, 5, 6)  # Vector(4, 10, 18)
result = Vector(1, 2, 3) * [4, 5, 6]        # Vector(4, 10, 18)

Supports int, float, Vector, list[3], and tuple[3]. Scalar multiplication works in both directions (scalar * vec and vec * scalar).


Common Uses

Setting entity velocity

# Launch a player upward
await player.set_velocity(Vector(0, 2.0, 0))

Spawning projectiles with velocity

# Shoot a fireball in the player's look direction
direction = player.look_direction * 2
arrow = await world.spawn_projectile(player, "ARROW", velocity=direction)

As position tuples

Many methods accept Vector | tuple[int,int,int] interchangeably:

# Both are equivalent
await world.fill(Vector(0, 60, 0), Vector(10, 65, 10), "STONE")
await world.fill((0, 60, 0), (10, 65, 10), "STONE")

Player spawn offset

await world.spawn_at_player(player, "ZOMBIE", offset=Vector(3, 0, 0))