Salta al contenuto
Minecraft Modding

Networking

Client vs Server

Minecraft ha un’architettura Client-Server (anche in giocatore singolo! C’è un server interno).

  • Il Server gestisce la logica (HP, posizioni, inventari).
  • Il Client gestisce il rendering e l’input.

Se modifichi una variabile sul Client, il Server non lo saprà (e viceversa), causando disconnessioni o “ghost items”.

Packets (Pacchetti)

Per comunicare, inviamo pacchetti.

1. Definire l’ID

```java public static final Identifier PACKET_ID = new Identifier(“tutorial”, “spawn_particle”); ```

2. Inviare dal Server al Client (S2C)

```java PacketByteBuf buf = PacketByteBufs.create(); buf.writeBlockPos(pos); // Dati da inviare

// Invia a tutti i giocatori nel mondo ServerPlayNetworking.send(player, PACKET_ID, buf); ```

3. Ricevere sul Client

Devi registrare il ricevitore nel client initializer.

```java ClientPlayNetworking.registerGlobalReceiver(PACKET_ID, (client, handler, buf, responseSender) -> { BlockPos pos = buf.readBlockPos();

// Esegui sul thread principale di render (importante!)
client.execute(() -> {
    client.world.addParticle(ParticleTypes.EXPLOSION, pos.getX(), pos.getY(), pos.getZ(), 0, 0, 0);
});

}); ```

C2S (Client to Server)

Funziona allo stesso modo, ma registri il ricevitore sul server (ServerPlayNetworking). Utile per keybinds custom che devono attivare abilità sul server.

Contenuto redatto con l'assistenza di strumenti di intelligenza artificiale e rivisto dalla redazione di Codegrind, che ne è responsabile. Hai trovato un errore? Scrivici.