public static void createEvents(GameModel model) throws IOException {
        URL url = Room.class.getResource(eventsDescriptorFilePath);
        BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
        assert reader != null;

        String line = null;

        while ((line = reader.readLine()) != null) {
            if (line.length() > 1) {
                Event e = null;

                String[] tokens = line.split(":");
                String[] eventTokens = tokens[0].split("\\(");
                String eventStr = eventTokens[0];

                // ARGUMENTS
                String arg = null;
                if (eventTokens.length > 1) {
                    assert eventTokens[1].endsWith(")") : "The parenthesis of event " + tokens[0] + " is not closed";
                    arg = eventTokens[1].substring(0, eventTokens[1].length() - 1);
                }

                // GameStarted
                if (eventStr.equals("GameStarted")) {
                    e = new GameStartedEvent(model);
                }
                // EnterRoom
                else if (eventStr.equals("EnterRoom")) {
                    assert arg != null : "The event " + eventStr + " needs arguments";

                    e = new EnterRoomEvent(Room.getRoom(arg), model.getPlayer());
                }
                else {
                    assert false : "Event " + eventStr + " unknown";
                }

                assert e != null;

                // ACTIONS
                String[] actions = tokens[1].split(",");

                for (String str : actions) {
                    e.addAction(getActionFromString(str));
                }

                eventList.add(e);
            }
        }
    }