/* * This file is part of FTB Launcher. * * Copyright © 2012-2016, FTB Launcher Contributors <https://github.com/Slowpoke101/FTBLaunch/> * FTB Launcher is licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.ftb.data; import com.beust.jcommander.IParameterValidator; import com.beust.jcommander.Parameter; import com.beust.jcommander.ParameterException; import lombok.Getter; /** * Setting given via command line * * Note: due a bug in jcommander do not use single long name, e.g. "--help". It will break output of usage() * * TODO: * * add hints about required values as soon as jcommander supports meta values * * ValidateRequiredValue.validate()'s argument name is always first item in the array. How to fix? will it confuse users? * * "help = true" does not stop Validators from running => ValidateRequiredValue will throw exception even if --help is given * */ public class CommandLineSettings { @Getter private static CommandLineSettings settings; static { settings = new CommandLineSettings(); } @Parameter(names = {"--verbose", "-V"}, description = "Level of verbosity: 0=debug, 1=info, 2=warning, 3=error", arity = 1) @Getter // default = VERBOSE private int verbosity = 0; @Parameter(names = {"--log-mc", "-m"}, description = "Show messages from minecraft process") @Getter private boolean mcLogs = false; @Parameter(names = {"--no-console", "-c"}, description = "Do not open console window. (Overrides GUI option.)") @Getter private boolean noConsole = false; @Parameter(names = {"--autostart", "-a"}, description = "Automatically start given pack (WIP feature)", arity = 1) @Getter private String packDir; @Parameter(names = {"--cache-dir", "-C"}, description = "Cache directory", arity = 1, validateWith = ValidateRequiredValue.class) @Getter private String cacheDir; @Parameter(names = {"--dynamic-dir", "-D"}, description = "Dynamic directory", arity = 1, validateWith = ValidateRequiredValue.class) @Getter private String dynamicDir; @Parameter(names = {"--pack-dir", "-P"}, description = "FTB installation directory", arity = 1, validateWith = ValidateRequiredValue.class) @Getter private String installDir; @Parameter(names = {"--use-mac", "-M"}, description = "Use mac address as an encryption key") @Getter private boolean useMac = false; @Parameter(names = {"--help", "-h"}, help = true, description = "Shows help") @Getter private boolean help = false; @Parameter(names = {"--disable-tray", "-t"}, description = "Disable tray icon") @Getter private boolean disableTray = false; @Parameter(names = {"--skip-first", "-s"}, description = "Skip first time startup dialogue") @Getter private boolean skipFirst = false; @Parameter(names = {"--set-version"}, description = "Set version") @Getter private int manualVersion = 0; @Parameter(names = {"--set-build"}, description = "Set build number") @Getter private int manualBuildNumber = 0; @Parameter(names = {"--disable-bitness-checks"}, description = "Disable JVM bitness check nagging screens") @Getter private boolean disableJVMBitnessCheck = false; @Parameter(names = {"--disable-jvm-version-checks"}, description = "Disable JVM version check nagging screens") @Getter private boolean disableJVMVersionCheck = false; @Parameter(names = {"--disable-installation-location-checks"}, description = "Disable installation location checks") @Getter private boolean disableInstallLocChecks = false; @Parameter(names = {"--disable-mc-logging"}, description = "Disable MC logging") @Getter private boolean disableMCLogging = false; @Parameter(names = {"--disable-news"}, description = "Disable contents of news pane") @Getter private boolean disableNews = false; public static class ValidateRequiredValue implements IParameterValidator { @Override public void validate (String name, String value) throws ParameterException { if (value == null || value.isEmpty()) { // this should never happen because jcommander bug throw new ParameterException("Expected a value after parameter " + name); } if (value.startsWith("-") && !value.equals("--")) { throw new ParameterException("Expected a value after parameter " + name + ". Looks like argument " + value); } } } }