Wersja deweloperska 1.21-ALPHA

Wielowątkowa platforma serwerowa Minecraft

Autonomiczny silnik serwera zbudowany w oparciu o architekturę zorientowaną na dane (ECS), asynchroniczne wczytywanie chunków Anvil i podział świata na niezależne, nieblokujące się regiony.

arxserver@console: ~

$ ./gradlew run

[19:40:02 INFO]: Starting ArxEngine version 1.21-ALPHA (Java 25)

[19:40:02 INFO]: Initializing ArxRegistry: 142 items loaded

[19:40:03 INFO]: Loading world databases from /worlds/world/...

[19:40:03 INFO]: Starting Netty pipeline on port 25565 (epoll backend)

[19:40:03 INFO]: RegionScheduler initiated with 8 parallel worker threads

[19:40:04 SUCCESS]: Server started in 1.48s! Ready for connections.

[19:40:12 INFO]: Player Arxnes [127.0.0.1] connected. UUID: 069a79f4-4e94-726a-772c-6b82c6d822a0

[19:40:12 INFO]: Velocity player verification successful.

[19:40:13 INFO]: Spawning entity player at world(0.0, 64.0, 0.0) in Region[0, 0]

Czysta technologia. Bez legacy bagażu.

ArxServer nie jest kolejnym forkiem Spigota czy Papera. To niezależna baza kodu napisana z myślą o maksymalnym wykorzystaniu nowoczesnego sprzętu.

⚙️

Podział na Regiony (Folia style)

Świat gry jest dzielony na dynamiczne, niezależne regiony tikujące na osobnych wątkach roboczych (Work-Stealing / ForkJoinPool). Koniec z lagami całego serwera przez jednego gracza.

🧬

Entity Component System (ECS)

Encje gry i ich dane są przechowywane w zorientowanych na dane układach pamięci (Archetypes). Zapewnia to maksymalne wykorzystanie pamięci podręcznej procesora (CPU cache) i eliminuje presję na GC.

🔌

Mostki kompatybilności

Nasz dedykowany moduł kompatybilności obsługuje wtyczki Bukkit/Paper poprzez dynamiczne proxy oraz mody Fabric bezpośrednio na poziomie punktów wejściowych (ModInitializer).

Przykładowy kod systemu w ECS

Zobacz, jak wygląda implementacja czystego systemu ruchu i kolizji w ArxEngine. Zamiast ciężkich obiektów typu Entity z Vanilla, dane o pozycji i prędkości są przetwarzane w liniowych tablicach komponentów.

~36 990 ops/s Przepustowość ECS (10k encji)
~13 308 ops/s Wyszukiwanie ścieżek A*
MovementSystem.java
package org.arxengine.arxserver.ecs.systems;

import org.arxengine.arxserver.ecs.*;
import org.arxengine.arxserver.ecs.components.*;

public class MovementSystem implements System {

    @Override
    public void update(World world, double deltaTime) {
        var chunks = world.query(PositionComponent.class, VelocityComponent.class);
        
        for (var chunk : chunks) {
            var positions = chunk.get(PositionComponent.class);
            var velocities = chunk.get(VelocityComponent.class);

            for (int i = 0; i < chunk.size(); i++) {
                var pos = positions[i];
                var vel = velocities[i];

                positions[i] = pos.translate(
                    vel.dx() * deltaTime,
                    vel.dy() * deltaTime,
                    vel.dz() * deltaTime
                );
            }
        }
    }
}

Status prac nad projektem

Rozwój platformy ArxEngine jest podzielony na fazy. Cały kod rdzenia serwera, bazy danych świata i stosu sieciowego został w pełni zaimplementowany.

✓ Faza 1
Fundamenty i Protokół Sieciowy
System rejestracji identyfikatorów, szybka obsługa połączeń oparta na Netty i Region Scheduler.
✓ Faza 2
Świat i Baza Danych ECS
Asynchroniczny zapis chunków (Anvil), baza danych w architekturze ECS, asynchroniczne oświetlenie.
✓ Faza 3
Logika Gry i Pathfinding
Szybkie parsowanie NBT, sztuczna inteligencja na trójwymiarowym grafie A* oraz silnik komend.
✓ Faza 4
Adaptery Kompatybilności
Dynamiczne mapowanie Bukkit/Paper API bez zaśmiecania rdzenia, integracja z Velocity/BungeeGuard.
● Faza 5
Modyfikacje i Optymalizacje
Środowisko uruchomieniowe modów Fabric, in-process generator Vanilla oraz mikrobenchmarki JMH.