package de.jaschastarke.minecraft.limitedcreative.regions;
import org.bukkit.configuration.ConfigurationSection;
import de.jaschastarke.bukkit.lib.configuration.Configuration;
import de.jaschastarke.bukkit.lib.configuration.ConfigurationContainer;
import de.jaschastarke.configuration.IConfigurationNode;
import de.jaschastarke.configuration.IConfigurationSubGroup;
import de.jaschastarke.configuration.InvalidValueException;
import de.jaschastarke.configuration.annotations.IsConfigurationNode;
import de.jaschastarke.maven.ArchiveDocComments;
import de.jaschastarke.maven.PluginConfigurations;
import de.jaschastarke.minecraft.limitedcreative.Config;
import de.jaschastarke.minecraft.limitedcreative.ModRegions;
import de.jaschastarke.minecraft.limitedcreative.limits.BlackList;
import de.jaschastarke.modularize.IModule;
import de.jaschastarke.modularize.ModuleEntry;
/**
* Region GameModes-Feature
*
* http://dev.bukkit.org/server-mods/limited-creative/pages/features/region/
*/
@ArchiveDocComments
@PluginConfigurations(parent = Config.class)
public class RegionConfig extends Configuration implements IConfigurationSubGroup {
protected ModRegions mod;
protected ModuleEntry<IModule> entry;
public RegionConfig(ConfigurationContainer container) {
super(container);
}
public RegionConfig(ModRegions modRegions, ModuleEntry<IModule> modEntry) {
super(modRegions.getPlugin().getDocCommentStorage());
mod = modRegions;
entry = modEntry;
}
@Override
public void setValue(IConfigurationNode node, Object pValue) throws InvalidValueException {
if (!(pValue instanceof BlackList))
super.setValue(node, pValue);
if (node.getName().equals("enabled")) {
entry.setEnabled(getEnabled());
}
}
@Override
public void setValues(ConfigurationSection sect) {
super.setValues(sect);
entry.setDefaultEnabled(getEnabled());
// Config Upgrade
if (!sect.contains("rememberOptional") && sect.contains("remember"))
sect.set("rememberOptional", sect.getBoolean("remember"));
}
@Override
public String getName() {
return "region";
}
@Override
public int getOrder() {
return 400;
}
/**
* RegionEnabled
*
* Enables the feature for "creative-regions". This Feature is automatically disabled, if the required plugin
* "WorldGuard" (http://dev.bukkit.org/server-mods/worldguard/) isn't found.
*
* default: true
*/
@IsConfigurationNode(order = 100)
public boolean getEnabled() {
return config.getBoolean("enabled", true);
}
/**
* RegionRememberOptional
*
* Remembers if players disables the Region-GameMode (by switching in an optional region to World-Default-GameMode
* with /lc creative|survival). So when the player re-enters the region, he keep his GameMode which he left it in.
* Hint: This is very confusing, if MultiVerse "enforce gamemode" swaps your state (default). So better don't use
* with Multiverse.
*
* default: false
*/
@IsConfigurationNode(order = 200)
public boolean getRememberOptional() {
return config.getBoolean("rememberOptional", false);
}
/**
* RegionSafeMode
*
* When a player leaves a region he always will get back to the World-GameMode, even if he entered the region already
* in the Region-GameMode. So its the opposite analog to RegionRememberOptional.
* That means: If a GM in creative-mode walks/flies through a creative-region in a survival world, he will get back
* to survival on leaving the region.
*
* default: false
*/
@IsConfigurationNode(order = 300)
public boolean getSafeMode() {
return config.getBoolean("safemode", false);
}
/**
* RegionMaximumFallingHeight
*
* When the player is more than this count of blocks above the ground, he is prevented from changing the region that
* sets him survival which would cause him falling and hurting.
*
* Set to -1 to disable
*
* default: 3
*/
@IsConfigurationNode(order = 500)
public int getMaxFallingHeight() {
return config.getInt("maxFallingHeight", 3);
}
}