Malas Prácticas

Estas malas prácticas deberían ser evitadas, ya que ellas pueden llevar a pérdidas de memoria (OutOfMemoryError), retraso o inconsistencias.

Almacenamiento de Referencias

Algunas instancias tales como

NUNCA debería ser almacenado en caché en complementos.

Estas son las razones principales para esto:

  • Las referencias previenen la apropiada recolección de la basura

  • Las instancias podrían no ser validas ya

Esto puede fácilmente ser evitado utilizando las instantáneas correspondientes o guardando el UUID de las instancias dadas y solicitando una instancia en tiempo real cuando lo necesite.

IO en el hilo principal

Ejecutando algunas operaciones IO tales como cargar un archivo de configuración/datos o verificar actualizaciones/conectándose a un sitio web, lleva mucho tiempo y afecta mucho al TPS en el servidor. Tales tareas deberían ser realizadas o en sus propios hilos o utilizando la característica asincrónica del programador incorporado. Sin embargo, está perfectamente bien cargar archivos requeridos/configurando en el hilo principal durante la puesta en marcha del servidor/inicicializacion del complemento.

Sponge.asyncScheduler().submit(Task.builder().execute(this::checkForUpdates).build());

Para mas detalles remitirse a scheduler docs.

Si esto esta hecho incorrectamente, es posible que veas a los clientes agotar el tiempo, o watchdog podría incluso matar el servidor.

Accediendo a los objetos del juego fuera del hilo principal

El acceso a objetos del juego fuera del hilo principal puede llevar a bloqueos, inconsistencias y otros problemas varios, y deben ser evitados. Si Ud. tiene una operación larga en un hilo diferente, use scheduler para realizar los cambios en tales objetos del juego en el hilo principal. Si Ud desea usar un objeto del juego en un hilo diferente, utilice una instantánea de la instancia o un contenedor de datos separado.

Advertencia

Si esto es realizado mal, Ud puede obtener una ``ConcurrentModificationException``con o sin una caída del servidor en el mejor de los casos y un jugador/mundo/servidor dañado en el peor.