L2J aCis: Estructura básica del proyecto pt. 2 (Java)

Iniciado por JBKDev, Ene 21, 2025, 07:03 PM

Tema anterior - Siguiente tema
Ene 21, 2025, 07:03 PM Ultima modificación: Ene 23, 2025, 01:22 AM por dandiarena
Hola buenas!

Hoy vamos a estar viendo en detalle la estructura de nuestro código Java(l2jaCis).

Para empezar, así es como se ven todos los directorios en esta app Java:



Bueno, vamos a empezar con lo más sencillo:

/accountmanager (Acá se encuentra el código de la aplicación startSQLAccountManager.bat que básicamente sirve para crear cuentas en el servidor).
/gsregistering (Similar al paquete anterior acá está el código de la aplicación que sirve para registrar el gameserver o RegisterGameServer.bat).
/commons (En este paquete vamos a encontrar varios directorios y cada uno corresponde a alguna herramienta común o útil para todo el proyecto).

/commons:



Bueno, como pueden ver en este paquete hay muchas herramientas que se usan a lo largo de todo el proyecto, algunos ejemplos serían:

/config (En este paquete se encuentran las clases que utilizamos para leer properties. Se definen todos los métodos utilizables para leer las properties directo de los archivos).
/crypt (Acá encontraremos la clase responsable de encriptar las contraseñas de las cuentas. Proporciona métodos para encriptar y des-encriptar contraseñas.).
/data (Acá encontramos todo lo que necesitamos para la lectura de todos los archivos XML que contiene este pack, provee todas las clases y métodos necesarios para obtener la información de los XML).
/pool (En pool lo que encontraremos son 2 clases, en donde una es responsable de generar la conexion a la base de datos de nuestro servidor y la otra se encarga de la ejecucion de hilos dentro del servidor).

Ahora vamos a tratar de explicar un poco los paquetes más importantes de nuestro código, gameserver y loginserver:

/loginserver:



Bueno, en este paquete vamos a encontrar todo lo que tiene que ver con el Login, es decir, podemos encontrar toda la lógica de la aplicación que levanta el login y no solo eso, también podemos hallar todos los paquetes que el login ejecuta en el servidor como validar el login de un player, recuperar la lista de servidores o levantar las configuraciones para el login. Tambien podemos encontrar cuestiones relacionadas a las cuentas de los players, recuperar los datos de las cuentas, manejar la sesión en el servidor y también validar el cliente con el que se está conectado.

/gameserver:



Como pueden ver en este paquete vamos a encontrar todo lo que tiene que ver con el servidor, el gameplay y como funciona todo dentro del juego.

/communitybbs (En este paquete se encuentra todo el código que usa el community board dentro del juego, acá se encuentra la lógica de cada pestaña mostrada por el community).
/data (Acá podemos encontrar todas las clases que se encargan de levantar las configuraciones que hay en archivos XML asi como también archivos estáticos guardados en carpetas como /crest que contiene todas las banderas de los clanes. Además los manager proporcionan operaciones a la base de datos como la creación de buff schemes y su posterior guardado en la base de datos).
/geoengine (Acá se encuentra toda la lógica del motor de la Geodata, cualquier cambio que se quiera hacer en la Geodata se debería hacer acá).
/handler (Este paquete es importante y probablemente el que más utilicemos, acá se encuentran las clases que se encargan de los comandos dentro del servidor, como por ejemplo los distintos comandos de chat, comandos de admin, comandos custom como .menu o .vip, también podemos encontrar itemhandlers que se encargan del comportamiento de los items como un item que da clan full o nobles. Otro de los tipos de handlers que podemos encontrar son los handlers de los skills, como por ejemplo el cancel, spoils, heals, resurections, drains, etc... Basicamente estos handlers definen el comportamiento de comandos, items e skills).
/model (Acá podemos encontrar el modelado de todos los objetos usados en el servidor, como pueden ser el objeto Player o el objeto NPC. También objetos como zonas, eventos, multisells, etc. En model también se encuentran las implementaciones de los objetos, por ejemplo, para el objeto NPC una implementación del mismo es un guardia, o un village master que cumplen funciones diferentes pero ambos son NPC's).
/network (Acá podemos encontrar todos los paquetes que realiza el gameserver como por ejemplo, la accion de dar party, hacer trade con un jugador, mover el personaje o incluso desloguearse todas las acciones que uno puede realizar en el servidor se encuentran acá).
/scripting (Acá están todas las quest del servidor, acá simplemente vamos a encontrar los scripts de cada quest).
/skills (En este paquete podemos encontrar la definicion básica de los skills, aca se encuentra el modelo basico de un skill con todas sus propiedades y funciones basicas. Tambien estan las clases que calculan el daño y los efectos de cada skill como por ejemplo los efectos que producen el fear o el anchor).
/taskmanager (En este paquete vamos a encontrar lo que respecta a tareas que se tienen que ejecutar con el tiempo y no de forma inmediata, por ejemplo, cuando un personaje es vip siempre tiene que existir un taskmanager que se encargue de validar cuanto tiempo le queda a un jugador para que se le acabe el vip).

Bien, creo con esto cubrimos alguno de los aspectos más importantes de la estructura del código, si bien todavía quedan muchos mas paquetes, la verdad es que no me alcanza para poner todo en un solo post asi que dejaremos esta guía por acá. Si les sirvió y quieren que siga profundizando más en este tema me lo hacen saber por comentarios o discord.

Muchas gracias por su tiempo, saludos!
Java Backend Developer