/FileExtraction/Java_unseen/Wind-Development_WindSpigot/WindSpigot-API/src/main/java/org/bukkit/configuration/ConfigurationOptions.java
package org.bukkit.configuration;

/**
 * Various settings for controlling the input and output of a
 * {@link Configuration}
 */
public class ConfigurationOptions {
	private char pathSeparator = '.';
	private boolean copyDefaults = false;
	private final Configuration configuration;

	protected ConfigurationOptions(Configuration configuration) {
		this.configuration = configuration;
	}

	/**
	 * Returns the {@link Configuration} that this object is responsible for.
	 *
	 * @return Parent configuration
	 */
	public Configuration configuration() {
		return configuration;
	}

	/**
	 * Gets the char that will be used to separate {@link ConfigurationSection}s
	 * <p>
	 * This value does not affect how the {@link Configuration} is stored, only in
	 * how you access the data. The default value is '.'.
	 *
	 * @return Path separator
	 */
	public char pathSeparator() {
		return pathSeparator;
	}

	/**
	 * Sets the char that will be used to separate {@link ConfigurationSection}s
	 * <p>
	 * This value does not affect how the {@link Configuration} is stored, only in
	 * how you access the data. The default value is '.'.
	 *
	 * @param value Path separator
	 * @return This object, for chaining
	 */
	public ConfigurationOptions pathSeparator(char value) {
		this.pathSeparator = value;
		return this;
	}

	/**
	 * Checks if the {@link Configuration} should copy values from its default
	 * {@link Configuration} directly.
	 * <p>
	 * If this is true, all values in the default Configuration will be directly
	 * copied, making it impossible to distinguish between values that were set and
	 * values that are provided by default. As a result,
	 * {@link ConfigurationSection#contains(java.lang.String)} will always return
	 * the same value as {@link ConfigurationSection#isSet(java.lang.String)}. The
	 * default value is false.
	 *
	 * @return Whether or not defaults are directly copied
	 */
	public boolean copyDefaults() {
		return copyDefaults;
	}

	/**
	 * Sets if the {@link Configuration} should copy values from its default
	 * {@link Configuration} directly.
	 * <p>
	 * If this is true, all values in the default Configuration will be directly
	 * copied, making it impossible to distinguish between values that were set and
	 * values that are provided by default. As a result,
	 * {@link ConfigurationSection#contains(java.lang.String)} will always return
	 * the same value as {@link ConfigurationSection#isSet(java.lang.String)}. The
	 * default value is false.
	 *
	 * @param value Whether or not defaults are directly copied
	 * @return This object, for chaining
	 */
	public ConfigurationOptions copyDefaults(boolean value) {
		this.copyDefaults = value;
		return this;
	}
}
