# MMO Server

Do you want player interaction inside of your Portal? This can be useful for mini-games that require co-operation or chat features.

## Setup

To connect to Sunflower Land MMO server, you must first update your `.env` file

```properties
VITE_API_URL=https://api-dev.sunflower-land.com
VITE_ROOM_URL=wss://mmo-dev.sunflower-land.com
```

Next you must ensure that a valid JWT is present from the player, see [#setup-and-authorisation](https://docs.sunflower-land.com/contributing/portal-apis#setup-and-authorisation "mention")

## Connect to Server

We use `colyseus` to manage MMO connections inside of the game. See the example below in `portalMachine.ts` as to how the Crop Boom minigame creates a server connection.

```typescript
          // Join the MMO Server
          let mmoServer: Room<PlazaRoomState> | undefined;
          const serverName = getServer();
          const mmoUrl = CONFIG.ROOM_URL;

          if (serverName && mmoUrl) {
            const client = new Client(mmoUrl);

            mmoServer = await client?.joinOrCreate<PlazaRoomState>(serverName, {
              jwt: context.jwt,
              bumpkin: game?.bumpkin,
              farmId,
              x: SPAWNS.portal_example.default.x,
              y: SPAWNS.portal_example.default.y,
              sceneId: "portal_example",
              experience: game.bumpkin?.experience ?? 0,
            });
          }
```

Once you have established a server connection, you must pass this `mmoServer` into your Phaser initialisation.

```typescriptreact
game.current.registry.set("mmoServer", portalState.context.mmoServer);
```
