Skip to content

Sistema Social de Mente Colmena

Parámetro del SistemaValor
Clase Principalnet.dasik.social.core.GlobalSocialSystem
Clase de Registronet.dasik.social.core.SocialRegistry
Frecuencia de Pulso1 tick (Regla del Inmortal)
Complejidad de Búsqueda$O(1)$ HashMap Fragmentado
Estrategia de LimpiezaPurga automática mediante isAlive() y isRemoved()

⚡ Descripción General y Regla del Inmortal (Highlander Rule)

El Sistema Social de Mente Colmena es el motor central de pulsos de Dasik Library. En lugar de que cientos de entidades sociales ejecuten consultas espaciales pesadas e individuales en cada tick, Dasik Library utiliza un coordinador de pulsos global único (GlobalSocialSystem).

👑 La Regla del Inmortal ("Solo Puede Haber Uno")

GlobalSocialSystem impone que únicamente un ciclo de pulso global se ejecute por tick del servidor ($20\text{ ticks} = 1\text{s}$). Si múltiples hilos o subsistemas intentan disparar un pulso dentro del mismo tick, GlobalSocialSystem ignora las llamadas duplicadas:

$$\text{Global Pulse Execution} = \begin{cases} \text{Execute Ticks}, & \text{if } \text{currentTick} > \text{lastTick} \ \text{Skip (No-Op)}, & \text{if } \text{currentTick} \le \text{lastTick} \end{cases}$$

ascii
[ Server Level Tick ]


 ┌──────────────────────┐
 │ GlobalSocialSystem   │  ◄── Highlander Rule Guard (1 tick per server tick)
 └──────────┬───────────┘


 ┌──────────────────────┐
 │   SocialRegistry     │  ◄── O(1) Shard Lookup & Dead Entity Purge
 └──────────┬───────────┘

      ┌─────┴────────────────┐
      ▼                      ▼
 ┌──────────────┐      ┌──────────────┐
 │ Entity 1     │      │ Entity N     │
 │ Mood Task    │      │ Mood Task    │
 └──────────────┘      └──────────────┘

🗂️ Arquitectura de SocialRegistry

SocialRegistry mantiene las entidades sociales activas organizadas por especie y UUIDs del mundo:

  • Registro en $O(1)$: Las entidades se registran mediante SocialRegistry.register(SocialEntity entity).
  • Purga Automática: Las referencias obsoletas (chunks descargados, entidades muertas) se purgan automáticamente durante el pulso evaluando entity.dasik$asEntity().isAlive() y isRemoved().
  • Fragmentación por Especie: Las entidades se agrupan por dasik$getSpeciesId(), permitiendo consultas de proximidad ultrarrápidas para mecánicas de manada sin iterar sobre todas las entidades del mundo.

💻 Ejemplo de Código para Desarrolladores

java
// Registering an entity to the Hive Mind
public class CustomSocialMob extends PathfinderMob implements SocialEntity {
    private final EntitySocialScheduler scheduler = new EntitySocialScheduler();

    @Override
    public void tick() {
        super.tick();
        if (this.level() instanceof ServerLevel serverLevel) {
            SocialRegistry.register(this);
            GlobalSocialSystem.pulse(serverLevel);
        }
    }

    @Override
    public SocialScheduler dasik$getScheduler() {
        return this.scheduler;
    }
}

🔗 Páginas Relacionadas

Official documentation & web portal for Dasik Igaijinn mods.