81 lines
2.6 KiB
Java
81 lines
2.6 KiB
Java
package tc.oc.lobby.bukkit;
|
|
|
|
import java.util.List;
|
|
import java.util.logging.Level;
|
|
import javax.inject.Inject;
|
|
|
|
import org.bukkit.Location;
|
|
import org.bukkit.World;
|
|
import org.bukkit.configuration.Configuration;
|
|
import org.bukkit.geometry.Cuboid;
|
|
import org.bukkit.util.Vector;
|
|
import tc.oc.commons.bukkit.configuration.ConfigUtils;
|
|
import tc.oc.commons.bukkit.logging.MapdevLogger;
|
|
import tc.oc.commons.bukkit.util.Vectors;
|
|
|
|
public class LobbyConfig {
|
|
|
|
private final Configuration config;
|
|
private final MapdevLogger logger;
|
|
|
|
@Inject LobbyConfig(Configuration config, MapdevLogger logger) {
|
|
this.config = config;
|
|
this.logger = logger;
|
|
}
|
|
|
|
private double getDouble(World world, String key, double def) {
|
|
try {
|
|
double value = (float) config.getDouble(key, Double.NaN);
|
|
if(!Double.isNaN(value)) return value;
|
|
|
|
String rule = world.getGameRuleValue(key);
|
|
if(!"".equals(rule)) {
|
|
return Double.parseDouble(rule);
|
|
}
|
|
|
|
return def;
|
|
} catch(RuntimeException ex) {
|
|
logger.log(Level.SEVERE, "Error parsing number '" + key + "' from lobby config: " + ex.getMessage(), ex);
|
|
throw ex;
|
|
}
|
|
}
|
|
|
|
private Vector getVector(World world, String key, Vector def) {
|
|
try {
|
|
Vector v = ConfigUtils.getVector(config, key, null);
|
|
if(v != null) return v;
|
|
|
|
String rule = world.getGameRuleValue(key);
|
|
if(!"".equals(rule)) {
|
|
return Vectors.parseVector(rule);
|
|
}
|
|
|
|
return def;
|
|
} catch(RuntimeException ex) {
|
|
logger.log(Level.SEVERE, "Error parsing vector '" + key + "' from lobby config: " + ex.getMessage(), ex);
|
|
throw ex;
|
|
}
|
|
}
|
|
|
|
public Location getSpawnLocation(World world) {
|
|
Vector pos = getVector(world, "spawn.pos", world.getSpawnLocation().toVector());
|
|
float yaw = (float) getDouble(world, "spawn.yaw", 0);
|
|
float pitch = (float) getDouble(world, "spawn.pitch", 0);
|
|
return pos.toLocation(world, yaw, pitch);
|
|
}
|
|
|
|
public double getSpawnRadius(World world) {
|
|
return getDouble(world, "spawn.radius", 0);
|
|
}
|
|
|
|
public Cuboid getBoundaries(World world) {
|
|
Vector min = getVector(world, "boundaries.min", Vectors.NEGATIVE_INFINITY);
|
|
Vector max = getVector(world, "boundaries.max", Vectors.POSITIVE_INFINITY);
|
|
return Cuboid.between(min, max);
|
|
}
|
|
|
|
public List<String> getDisabledPermissions() {
|
|
return config.getStringList("disabled-permissions");
|
|
}
|
|
}
|