mcvm 0.4.3

A command-line Minecraft launcher for the future
Documentation
# Game Options

mcvm is capable of applying global options for both client and server
that are inherited across all of your profiles. The options are agnostic
to the Minecraft version and automatically converted to the correct format. Options are supplied in a JSON
format in the file `options.json` in your config directory. This file may not exist so you might
have to create it yourself.

Format:
```json
{
	"client": {
		...
	},
	"server": {
		...
	}
}
```

Options that you do not change will not be changed in the output file. Options that mcvm does not know about will not be touched either.

A description will not be provided for every option as they mirror the options in-game and inside the server.properties and should be somewhat self-explanatory. Any options that need an explanation will have a note.

## Client

```json
{
	"data_version": integer,
	"video": {
		"vsync": bool,
		"entity_shadows": bool,
		"fullscreen": bool,
		"view_bobbing": bool,
		"dark_mojang_background": bool,
		"hide_lightning_flashes": bool,
		"fov": integer,
		"screen_effect_scale": number,
		"fov_effect_scale": number,
		"darkness_effect_scale": number,
		"brightness": number,
		"render_distance": integer,
		"simulation_distance": integer,
		"entity_distance_scaling": number,
		"gui_scale": number,
		"particles": "all" | "decreased" | "minimal" | integer,
		"max_fps": number,
		"graphics_mode": "fast" | "fancy" | "fabulous" | integer,
		"smooth_lighting": bool,
		"chunk_updates_mode": "threaded" | "semi_blocking" | "fully_blocking" | integer,
		"biome_blend": integer,
		"clouds": "fancy" | "fast" | "off" | integer,
		"mipmap_levels": integer,
		"window_width": integer,
		"window_height": integer,
		"attack_indicator": "off" | "crosshair" | "hotbar" | integer,
		"fullscreen_resolution"?: {
			"width": integer,
			"height": integer,
			"refresh_rate": integer,
			"color_bits": integer
		},
		"allow_block_alternatives": bool
	},
	"control": {
		"keys": {
			"attack": Keybind,
			"use": Keybind,
			"forward": Keybind,
			"left": Keybind,
			"back": Keybind,
			"right": Keybind,
			"jump": Keybind,
			"sneak": Keybind,
			"sprint": Keybind,
			"drop": Keybind,
			"inventory": Keybind,
			"chat": Keybind,
			"playerlist": Keybind,
			"pick_item": Keybind,
			"command": Keybind,
			"social_interactions": Keybind,
			"screenshot": Keybind,
			"toggle_perspective": Keybind,
			"smooth_camera": Keybind,
			"fullscreen": Keybind,
			"spectator_outlines": Keybind,
			"swap_offhand": Keybind,
			"save_toolbar": Keybind,
			"load_toolbar": Keybind,
			"advancements": Keybind,
			"hotbar_1": Keybind,
			"hotbar_2": Keybind,
			"hotbar_3": Keybind,
			"hotbar_4": Keybind,
			"hotbar_5": Keybind,
			"hotbar_6": Keybind,
			"hotbar_7": Keybind,
			"hotbar_8": Keybind,
			"hotbar_9": Keybind
		},
		"auto_jump": bool,
		"invert_mouse_y": bool,
		"enable_touchscreen": bool,
		"toggle_sprint": bool,
		"toggle_crouch": bool,
		"mouse_sensitivity": number,
		"mouse_wheel_sensitivity": number,
		"raw_mouse_input": bool
	},
	"chat": {
		"auto_command_suggestions": bool,
		"enable_colors": bool,
		"enable_links": bool,
		"prompt_links": bool,
		"force_unicode": bool,
		"visibility": "shown" | "commands_only" | "hidden" | integer,
		"opacity": number,
		"line_spacing": number,
		"background_opacity": number,
		"background_for_chat_only": bool,
		"focused_height": number,
		"unfocused_height": number,
		"delay": number,
		"scale": number,
		"width": number,
		"narrator_mode": "off" | "all" | "chat" | "system" | integer
	},
	"sound": {
		"volume": {
			"master": number,
			"music": number,
			"record": number,
			"weather": number,
			"block": number,
			"hostile": number,
			"neutral": number,
			"player": number,
			"ambient": number,
			"voice": number
		},
		"show_subtitles": bool,
		"directional_audio": bool,
		"device"?: string
	},
	"skin": {
		"cape": bool,
		"jacket": bool,
		"left_sleeve": bool,
		"right_sleeve": bool,
		"left_pants": bool,
		"right_pants": bool,
		"hat": bool
	},
	"custom": {
		...
	},
	"realms_notifications": bool,
	"reduced_debug_info": bool,
	"difficulty": "peaceful" | "easy" | "normal" | "hard" | integer,
	"resource_packs": [string],
	"language": string,
	"tutorial_step": "movement" | "find_tree" | "punch_tree" | "open_inventory" | "craft_planks" | "none",
	"skip_multiplayer_warning": bool,
	"skip_realms_32_bit_warning": bool,
	"hide_bundle_tutorial": bool,
	"joined_server": bool,
	"sync_chunk_writes": bool,
	"use_native_transport": bool,
	"held_item_tooltips": bool,
	"advanced_item_tooltips": bool,
	"log_level": "none" | "high" | "medium" | "low" | "notification" | integer,
	"hide_matched_names": bool,
	"pause_on_lost_focus": bool,
	"main_hand": "left" | "right",
	"hide_server_address": bool,
	"show_autosave_indicator": bool,
	"allow_server_listing": bool
}
```

### Notes:
1. Keybinds may be any of the following strings:
	`"unbound"`,
	`"mouse_left"`,
	`"mouse_right"`,
	`"mouse_middle"`,
	`"mouse4"`,
	`"mouse5"`,
	`"mouse6"`,
	`"mouse7"`,
	`"mouse8"`,
	`"num0"`,
	`"num1"`,
	`"num2"`,
	`"num3"`,
	`"num4"`,
	`"num5"`,
	`"num6"`,
	`"num7"`,
	`"num8"`,
	`"num9"`,
	`"a"`,
	`"b"`,
	`"c"`,
	`"d"`,
	`"e"`,
	`"f"`,
	`"g"`,
	`"h"`,
	`"i"`,
	`"j"`,
	`"k"`,
	`"l"`,
	`"m"`,
	`"n"`,
	`"o"`,
	`"p"`,
	`"q"`,
	`"r"`,
	`"s"`,
	`"t"`,
	`"u"`,
	`"v"`,
	`"w"`,
	`"x"`,
	`"y"`,
	`"z"`,
	`"f1"`,
	`"f2"`,
	`"f3"`,
	`"f4"`,
	`"f5"`,
	`"f6"`,
	`"f7"`,
	`"f8"`,
	`"f9"`,
	`"f10"`,
	`"f11"`,
	`"f12"`,
	`"f13"`,
	`"f14"`,
	`"f15"`,
	`"f16"`,
	`"f17"`,
	`"f18"`,
	`"f19"`,
	`"f20"`,
	`"f21"`,
	`"f22"`,
	`"f23"`,
	`"f24"`,
	`"f25"`,
	`"num_lock"`,
	`"numpad0"`,
	`"numpad1"`,
	`"numpad2"`,
	`"numpad3"`,
	`"numpad4"`,
	`"numpad5"`,
	`"numpad6"`,
	`"numpad7"`,
	`"numpad8"`,
	`"numpad9"`,
	`"numpad_add"`,
	`"numpad_decimal"`,
	`"numpad_enter"`,
	`"numpad_equal"`,
	`"numpad_multiply"`,
	`"numpad_divide"`,
	`"numpad_subtract"`,
	`"down"`,
	`"left"`,
	`"right"`,
	`"up"`,
	`"apostrophe"`,
	`"backslash"`,
	`"comma"`,
	`"equal"`,
	`"grave_accent"`,
	`"left_bracket"`,
	`"right_bracket"`,
	`"minus"`,
	`"period"`,
	`"semicolon"`,
	`"slash"`,
	`"space"`,
	`"tab"`,
	`"left_alt"`,
	`"right_alt"`,
	`"left_shift"`,
	`"right_shift"`,
	`"left_control"`,
	`"right_control"`,
	`"left_system"`,
	`"right_system"`,
	`"enter"`,
	`"escape"`,
	`"backspace"`,
	`"delete"`,
	`"home"`,
	`"end"`,
	`"insert"`,
	`"page_down"`,
	`"page_up"`,
	`"caps_lock"`,
	`"pause"`,
	`"scroll_lock"`,
	`"menu"`,
	`"print_screen"`,
	`"world1"`,
	`"world2"`,

## Server

```json
{
	"rcon": {
		"enable": bool,
		"port": integer,
		"password"?: string
	},
	"query": {
		"enable": bool,
		"port": integer
	},
	"whitelist": {
		"enable": bool,
		"enforce": bool
	},
	"gamemode": {
		"default": "survival" | "creative" | "adventure" | "spectator" | integer,
		"force": bool
	},
	"datapacks": {
		"function_permission_level": integer,
		"initial_enabled": [String],
		"initial_disabled": [String]
	},
	"world": {
		"name": string,
		"seed"?: string,
		"type": "normal" | "flat" | "large_biomes" | "amplified" | "single_biome" | "buffet" | "custom" | string,
		"structures": bool,
		"generator_settings": {},
		"max_size": integer,
		"max_build_height": integer,
		"allow_nether": bool
	},
	"resource_pack": {
		"uri"?: String,
		"prompt"?: String,
		"sha1"?: String,
		"required": bool
	},
	"custom": {
		...
	},
	"allow_flight": bool,
	"broadcast_console_to_ops": bool,
	"broadcast_rcon_to_ops": bool,
	"difficulty": "peaceful" | "easy" | "normal" | "hard" | integer,
	"allow_command_blocks": bool,
	"jmx_monitoring": bool,
	"enable_status": bool,
	"enforce_secure_profile": bool,
	"entity_broadcast_range": integer,
	"max_chained_neighbor_updates": integer,
	"max_players": integer,
	"max_tick_time": integer,
	"motd": string,
	"network_compression_threshold": number | "disabled" | "all",
	"offline_mode": bool,
	"op_permission_level": integer,
	"player_idle_timeout": integer,
	"prevent_proxy_connections": bool,
	"enable_chat_preview": bool,
	"enable_pvp": bool,
	"rate_limit": integer,
	"ip"?: string,
	"port": integer,
	"simulation_distance": integer,
	"enable_snooper": bool,
	"spawn_animals": bool,
	"spawn_monsters": bool,
	"spawn_npcs": bool,
	"spawn_protection": integer,
	"sync_chunk_writes": bool,
	"use_native_transport": bool,
	"view_distance": integer
}
```

### Notes:
 1. `offline_mode` is the opposite of the usual server.properties option `online_mode`
 2. Remember to inclue `"vanilla"` in the `datapacks.initial_enabled` key if you change it