MindCraft
Authors: Cristian-Paul Bara*, Sky CH-Wang*, Joyce Chai
This is the official code repository for the paper (arXiv link):
Cristian-Paul Bara, Sky CH-Wang, and Joyce Chai. 2021. MindCraft: Theory of Mind Modeling for Situated Dialogue in Collaborative Tasks. In Proceedings of the 2021 Conference on Empirical Methods in Natural Language Processing (EMNLP).
@inproceedings{bara2021mindcraft,
title={MindCraft: Theory of Mind Modeling for Situated Dialogue in Collaborative Tasks},
author={Bara, Cristian-Paul and CH-Wang, Sky and Chai, Joyce},
booktitle={Proceedings of the 2021 Conference on Empirical Methods in Natural Language Processing (EMNLP)},
year={2021}
}
Installation Instructions
This README assumes that the user is about to set up the MindCraft task on a to-be-newly-created Ubuntu-based AWS EC2 Server. If not, some commands may be invalid (e.g. apt-get
vs. apt
). This has been tested on both Ubuntu versions 18 and 20.
Server Setup & Port Forwarding (for reference, AWS port forwarding guidelines are adapted from here):
- Launch an EC2 Instance, choosing an Ubuntu-based x86 Amazon Machine Image such as Ubuntu Server 20.04 LTS (HVM), SSD Volume Type.
- Choose an instance type. Minimum resource requirements are relatively high, seeing as we are going to run web & game servers concurrently on the same machine. Testing has indicated that instances like
t2.xlarge
with at least 16 gigs of RAM work fine. - Leave the options specified in
3. Configure Instance
,4. Add Storage
, and5. Add Tags
as default. - On
6. Configure Security Group
,Add Rule
of typeCustom TCP Rule
, with optionsPort Range: 22565
andSource: Anywhere
. This ensures that players can access the game server with just the IP address. - Add another rule, this time with option
Port Range: 8080
, keeping all other options the same as above. This ensures that players can access the web server with just the IP address. - Review and launch, specifying your EC2 KeyPair for remote admin access.
Required Depenencies (install these ssh
ed into the EC2 machine):
- Java (for reference, Java-Spigot guidelines are adapted from here)
- First, update your local package lists with
sudo apt update
; this updates the URL locations for all the required dependencies you're going to install later. On a newly-created EC2 server, these lists at startup are going to be horribly out of date. - Next, install Java Runtime Environment 8 with
sudo apt install openjdk-8-jre-headless
.
- First, update your local package lists with
- MySQL (for reference, MySQL guidelines are adapted from here)
- To install MySQL server, run
sudo apt install mysql-server
. - Run setup script
sudo mysql_secure_installation
to configure your newly installed server with authentication permissions. Go through the setup instructions, setting up a password for theroot
-user, and confirming other security settings. - To confirm that your newly-installed MySQL server is running, run
systemctl status mysql.service
to manually check. - Now, the password just created in step 2.2 doesn't actually enable remote connections as
root
(which we want for our game server & web server); here, execute:sudo mysql
- In the MYSQL commandline, run
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
(replacing password with a password of your choosing). - And finally
FLUSH PRIVILEGES;
to write changes to disk. - To exit the MySQL commandline,
exit
.
- To create your MySQL database (where all MindCraft user activity is recorded), enter the MySQL commandline this time with
mysql -u root -p
, and then entering the password you just created. - In the commandline interface,
CREATE DATABASE minecraft;
to create, and thenSHOW DATABASES;
to manually confirm the creation of theminecraft
database. Before youexit
, runSHOW GLOBAL VARIABLES LIKE 'PORT';
to confirm the port that the MySQL server is running on (by default, it should be 3306). - Finally, set up game server plugin authentication details! Before you proceed: if this is your first time setting this up, the files listed below may not have been created yet. To create these files, go ahead and start the server once with
bash startServer.sh
. You're going to see a ton of errors appear, but hold out for now! When the server is done spinning up, enterstop
to stop the server, and then proceed onto these sub-steps.- Open
spigot/plugins/situatedDialogue/config.yml
, and change:mysql_password
to what you defined in 2.4.2.mysql_port
to what you just confirmed in 2.4.6 (default is 3306).
- Open
spigot/plugins/LogBlock/config.yml
, and change the same lines as above, this time under sectionmysql
. Remember to also change the MySQL user here toroot
(default initialization has it as something else)! - Open
mean/server.js
and do the same for MYSQL authentication credentials in the first few lines. - Open
spigot/plugins/AdvancedReplay
and do the same formysql.yml
.
- Open
- To install MySQL server, run
- NPM (for reference, Node.JS guidelines are adapted from here)
- Package lists should already be up-to-date, so running
sudo apt install nodejs
andsudo apt install npm
will suffice; this will install the latest versions.
- Package lists should already be up-to-date, so running
- MongoDB (for reference, Mongo guidelines are adapted from here) These steps are necessary mainly because I have used a cookie cutter MEAN stack setup, even though the underlying web server doesn't really use Mongo at all.
- Run
wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -
- Run
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list
- Run
sudo apt update
andsudo apt install -y mongodb-org
to install Mongo. - Run
sudo systemctl start mongod
to start the service andsudo systemctl status mongod
to check service status. - Finally, run
sudo systemctl enable mongod
to enable Mongo to start on every server reboot.
- Run
File Structure
The MindCraft environment is split into three main modules: (1) initialization, by which task variables (e.g. number of games, complexity of games, and more) are set to customized or default values; (2) the game server, a Bukkit/Spigot-made Minecraft multiplayer server that hosts the game itself and records all in-game interactions; and (3) the web server, a MEAN-stack (mainly, Node.JS) web server that records webpage user interactions, where currently recording of player mental states takes place.
All recording of user data -both game server and through the web server- are consolidated into a local MySQL database, the authentication details of which are to be specifiied in initialization files (or left as default).
Execution
Both the game server and web server are designed to be run concurrently in parallel. To achieve this, set up two tmux
es and run the following sections in separate muxes.
Game Server: Run bash startServer.sh
. Edit the parameters passed to the plan generator python script if desired before running the server. If it's your first time running the server, you may have to go the newly-generated spigot/eula.txt
and change eula=false
to eula=true
.
Web Server: Navigate to the mean
folder and run npm start
. Do this after the game server has been successfully spun up.
Replay
For replaying a specific previous game, make sure that the correct plan file of the logged game, indicated in the format logs/logs.XXXXXXX.plan.json
(where XXX is the UNIX time stamp of when the game was played), is copied to the following folder and named as plan_generator/plan.json
. After this has been done, start the server with bash spigot/start.command
instead of the usual bash file.