in Minecraft/src/main/java/com/microsoft/Malmo/Client/ClientStateMachine.java [283:341]
protected StateEpisode getStateEpisodeForState(IState state)
{
if (!(state instanceof ClientState))
return null;
ClientState cs = (ClientState) state;
switch (cs) {
case WAITING_FOR_MOD_READY:
return new InitialiseClientModEpisode(this);
case DORMANT:
return new DormantEpisode(this);
case CREATING_HANDLERS:
return new CreateHandlersEpisode(this);
case EVALUATING_WORLD_REQUIREMENTS:
return new EvaluateWorldRequirementsEpisode(this);
case PAUSING_OLD_SERVER:
return new PauseOldServerEpisode(this);
case CLOSING_OLD_SERVER:
return new CloseOldServerEpisode(this);
case CREATING_NEW_WORLD:
return new CreateWorldEpisode(this);
case WAITING_FOR_SERVER_READY:
return new WaitingForServerEpisode(this);
case RUNNING:
return new MissionRunningEpisode(this);
case IDLING:
return new MissionIdlingEpisode(this);
case MISSION_ENDED:
return new MissionEndedEpisode(this, MissionResult.ENDED, false, false, true);
case ERROR_DUFF_HANDLERS:
return new MissionEndedEpisode(this, MissionResult.MOD_FAILED_TO_INSTANTIATE_HANDLERS, true, true, true);
case ERROR_INTEGRATED_SERVER_UNREACHABLE:
return new MissionEndedEpisode(this, MissionResult.MOD_SERVER_UNREACHABLE, true, true, true);
case ERROR_NO_WORLD:
return new MissionEndedEpisode(this, MissionResult.MOD_HAS_NO_WORLD_LOADED, true, true, true);
case ERROR_CANNOT_CREATE_WORLD:
return new MissionEndedEpisode(this, MissionResult.MOD_FAILED_TO_CREATE_WORLD, true, true, true);
case ERROR_CANNOT_START_AGENT: // run-ons deliberate
case ERROR_LOST_AGENT:
case ERROR_LOST_VIDEO:
return new MissionEndedEpisode(this, MissionResult.MOD_HAS_NO_AGENT_AVAILABLE, true, true, false);
case ERROR_LOST_NETWORK_CONNECTION: // run-on deliberate
case ERROR_CANNOT_CONNECT_TO_SERVER:
return new MissionEndedEpisode(this, MissionResult.MOD_CONNECTION_FAILED, true, false, true); // No point trying to inform the server - we can't reach it anyway!
case ERROR_TIMED_OUT_WAITING_FOR_EPISODE_START: // run-ons deliberate
case ERROR_TIMED_OUT_WAITING_FOR_EPISODE_PAUSE:
case ERROR_TIMED_OUT_WAITING_FOR_EPISODE_CLOSE:
case ERROR_TIMED_OUT_WAITING_FOR_MISSION_END:
case ERROR_TIMED_OUT_WAITING_FOR_WORLD_CREATE:
return new MissionEndedEpisode(this, MissionResult.MOD_CONNECTION_FAILED, true, true, true);
case MISSION_ABORTED:
return new MissionEndedEpisode(this, MissionResult.MOD_SERVER_ABORTED_MISSION, true, false, true); // Don't inform the server - it already knows (we're acting on its notification)
case WAITING_FOR_SERVER_MISSION_END:
return new WaitingForServerMissionEndEpisode(this);
default:
break;
}
return null;
}