Added SettingsLoader and improved default settings.

This commit is contained in:
Andrew Lalis 2021-07-06 21:11:06 +02:00
parent 12daa6ab1b
commit cbcc8b3db1
4 changed files with 68 additions and 8 deletions

2
.gitignore vendored
View File

@ -4,3 +4,5 @@ core/target/
server/target/
server-registry/target/
*.iml
/settings.yaml
/*.log

View File

@ -17,6 +17,7 @@ import nl.andrewlalis.aos_core.net.data.PlayerDetailUpdate;
import nl.andrewlalis.aos_core.net.data.WorldUpdate;
import nl.andrewlalis.aos_core.util.ByteUtils;
import nl.andrewlalis.aos_server.settings.ServerSettings;
import nl.andrewlalis.aos_server.settings.SettingsLoader;
import java.awt.*;
import java.io.IOException;
@ -54,6 +55,7 @@ public class Server {
this.worldUpdater = new WorldUpdater(this, this.world);
this.chatManager = new ChatManager(this);
if (settings.getRegistrySettings().isDiscoverable()) {
System.out.println("Starting registry communications.");
this.registryManager = new RegistryManager(this);
}
}
@ -267,11 +269,7 @@ public class Server {
public static void main(String[] args) throws IOException {
ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
mapper.setPropertyNamingStrategy(PropertyNamingStrategies.KEBAB_CASE);
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
var settings = mapper.readValue(Server.class.getClassLoader().getResourceAsStream("default_settings.yaml"), ServerSettings.class);
Server server = new Server(settings);
Server server = new Server(SettingsLoader.load());
server.run();
}
}

View File

@ -0,0 +1,38 @@
package nl.andrewlalis.aos_server.settings;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
public class SettingsLoader {
public static ServerSettings load() throws IOException {
Path settingsFile = Path.of("settings.yaml");
ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
mapper.setPropertyNamingStrategy(PropertyNamingStrategies.KEBAB_CASE);
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
if (Files.notExists(settingsFile)) {
System.out.println(settingsFile.getFileName() + " does not exist yet. Initializing with default settings.");
try (
InputStream in = SettingsLoader.class.getClassLoader().getResourceAsStream("default_settings.yaml");
OutputStream out = Files.newOutputStream(settingsFile)
) {
if (in == null) throw new IOException("Could not read default settings.");
in.transferTo(out);
System.out.println("Initialized server with default settings. Please review these and restart to apply changes.");
} catch (IOException e) {
e.printStackTrace();
}
}
InputStream in = Files.newInputStream(settingsFile);
var settings = mapper.readValue(in, ServerSettings.class);
in.close();
return settings;
}
}

View File

@ -1,3 +1,8 @@
# Ace of Shades Server Settings
# Changes to these settings take effect only after restarting the server.
# The port that this server uses for TCP and UDP communication.
port: 8035
# The maximum number of players that can be connected at once.
@ -6,10 +11,11 @@ max-players: 32
# WARNING: Changing this has a major impact on server performance.
ticks-per-second: 120
# Information for the public server registry.
# Information for the public server registry. Ignore this unless you want your server to be displayed publicly.
registry-settings:
# Set this to true to allow other players to see this server and join it.
discoverable: true
discoverable: false
# The URI which points to the registry server. This is only used if discoverable is true.
registry-uri: "http://localhost:8567"
# How often to send status updates to the registry server, in seconds.
@ -26,26 +32,42 @@ registry-settings:
# Settings that control player behavior.
player-settings:
# Walking speed, in meters per second.
speed: 10
# Sprinting speed, in meters per second.
sprint-speed: 18
# Sneaking speed, in meters per second.
sneak-speed: 5
# Acceleration when player starts moving or changes direction, in m/s^2.
acceleration: 60
# Deceleration when player stops moving, in m/s^2.
deceleration: 30
# The radius of the player.
radius: 0.5
# How many seconds a player must wait before resupplying again.
resupply-cooldown: 30
# The maximum health of players.
max-health: 100
# How quickly players regenerate health, in points per second. Set to 0 to disable regeneration.
health-regen-rate: 1.0
# How much sneaking affects gun accuracy. Values less than 0 increase accuracy, and greater than 0 decrease accuracy.
sneak-accuracy-modifier: 0.5
# How much sprinting affects gun accuracy. Values less than 0 increase accuracy, and greater than 0 decrease accuracy.
sprint-accuracy-modifier: 1.5
# Should be the name of one of the guns defined in "gun-settings".
default-gun: M1 Garand
# Settings for team mechanics.
team-settings:
# The radius of team spawn points, in meters.
spawn-point-radius: 3
# The radius of team resupply points, in meters.
supply-point-radius: 2
# Whether friendly fire is enabled. If enabled, players can kill teammates.
friendly-fire: false
# The list of available guns are defined in this list.
gun-settings:
- name: AK-47