Build tools
- JDK 21 to compile and run JFTSE
- Maven 3.6.3 or later to build the project
- Git to get the source
Get the tools you need, build the emulator and connect a Fantasy Tennis client to your server.
Versions below come from the project README.
This path uses Maven to build JFTSE and runs the Java services locally. You can run MySQL and RabbitMQ locally or in containers.
Start MySQL and RabbitMQ. Set the database and broker credentials in the server configuration.
Clone the repository and run mvn clean install from the project root.
Run the auth server once with -import, then restart it without that flag. Check server.conf for each service. Import the remaining game data with scripts/import_sql.sh, then start the game and relay servers.
Launch the client once to create Serverinfo.ini. Set the auth server address and port there, then relaunch and sign in with the account you set up.
Before launching a service: Use the JAR your build produced in the module’s target directory. If the build placed server.conf and runtime assets under target/dist, launch from that directory so the service can find them.
Start with a working local setup. Then check each connection from a player’s machine before inviting others. For what each service does, see the emulator module guide.
Serverinfo.ini tells the client where to sign in.
The GameServer row advertises the host and port for the channel.
The relay carries match traffic. Test a match with a second client.
server.confSet the listening ServerPort for each service. The game server also reads RelayPort here. The default location is the working directory. To load it from another directory, set the JVM property conf.path.
application.propertiesConfigure database, RabbitMQ and service-to-service connections here. Start with the settings shipped with each module in your checkout.
Serverinfo.ini points the client to authentication. GameServer records advertise game and relay endpoints. Check reachability from a player’s machine.
GameServerhost and port. A loopback address only works for a client on the server machine. Check the corresponding relay record if players can join a channel but cannot enter a match.ConfigS_Maps and M_ScenariosMap_2_Scenarios to associate a scenario with a map.S_RelationshipsS_LotteryItemPool and S_Raritylottery.* keys in Config control rules such as pity thresholds.Product and K_StatusGuardian_2_Maps and Skill_2_GuardiansBefore changing game data: Back up your database, test one change at a time and verify it with a client on a test instance.
Find answers about joining a server, running one and troubleshooting connections.
You can join an existing community server. Pick one from the server directory and follow its instructions for downloading the client and creating an account.
The Compose file in the repository defines MySQL, RabbitMQ and an emulator container. The steps above use a local Java build. If you follow those steps, you only need the MySQL and RabbitMQ services from Compose.
Use -import for the initial auth-server import. Once it finishes, start the auth server without the flag. The remaining game data has its own import steps in the installation guide.
If login fails, check that the auth server is running and that Serverinfo.ini points to it. If login works but joining a channel fails, check the GameServer table. Its host and port must point to the game endpoint the client can actually reach. See the operator guide for the distinction.
Check the working directory you launched it from. Put the module’s server.conf there or pass -Dconf.path=/path/to/config before -jar. Use the directory that contains the file.
Check the addresses in Serverinfo.ini and the relevant GameServer records. An address such as 127.0.0.1 points to each player's own computer. Use addresses players can reach and check firewall rules and any router forwarding for the game endpoints they need.
Check that the pool row is active and has the intended gacha index and product. The game server caches the pool. Check LotteryPoolCacheRefreshInterval in server.conf and allow for a refresh before testing again.
Check that the relay is running and that its listening port matches the game server’s RelayPort and the corresponding GameServer record. Verify that the advertised endpoint is reachable from another client.
Back up the database, then try the change on a test instance using a copy of the data. Change one thing at a time and verify the result in the client. The database table guide shows where to start for maps, Guardians and lottery rewards.