Mirror von
https://github.com/PaperMC/Velocity.git
synchronisiert 2024-11-17 13:30:17 +01:00
Merge pull request #128 from mikroskeem/fix-configuration-saving
Fix configuration saving
Dieser Commit ist enthalten in:
Commit
940717412d
@ -147,16 +147,15 @@ public class VelocityServer implements ProxyServer {
|
|||||||
Path configPath = Paths.get("velocity.toml");
|
Path configPath = Paths.get("velocity.toml");
|
||||||
configuration = VelocityConfiguration.read(configPath);
|
configuration = VelocityConfiguration.read(configPath);
|
||||||
|
|
||||||
|
AnnotatedConfig
|
||||||
|
.saveConfig(configuration.dumpConfig(), configPath); // Resave config to add new values
|
||||||
|
|
||||||
if (!configuration.validate()) {
|
if (!configuration.validate()) {
|
||||||
logger.error(
|
logger.error(
|
||||||
"Your configuration is invalid. Velocity will refuse to start up until the errors are resolved.");
|
"Your configuration is invalid. Velocity will refuse to start up until the errors are resolved.");
|
||||||
LogManager.shutdown();
|
LogManager.shutdown();
|
||||||
System.exit(1);
|
System.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
AnnotatedConfig
|
|
||||||
.saveConfig(configuration.dumpConfig(), configPath); //Resave config to add new values
|
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.error("Unable to read/load/save your velocity.toml. The server will shut down.", e);
|
logger.error("Unable to read/load/save your velocity.toml. The server will shut down.", e);
|
||||||
LogManager.shutdown();
|
LogManager.shutdown();
|
||||||
|
@ -125,7 +125,7 @@ public abstract class AnnotatedConfig {
|
|||||||
|
|
||||||
// Get a key name for config. Use field name if @ConfigKey annotation is not present.
|
// Get a key name for config. Use field name if @ConfigKey annotation is not present.
|
||||||
ConfigKey key = field.getAnnotation(ConfigKey.class);
|
ConfigKey key = field.getAnnotation(ConfigKey.class);
|
||||||
final String name = safeKey(key == null ? field.getName() : key.value());
|
final String name = escapeKeyIfNeeded(key == null ? field.getName() : key.value());
|
||||||
|
|
||||||
Object value = field.get(dumpable);
|
Object value = field.get(dumpable);
|
||||||
|
|
||||||
@ -142,7 +142,7 @@ public abstract class AnnotatedConfig {
|
|||||||
Map<String, ?> map = (Map<String, ?>) value;
|
Map<String, ?> map = (Map<String, ?>) value;
|
||||||
for (Entry<String, ?> entry : map.entrySet()) {
|
for (Entry<String, ?> entry : map.entrySet()) {
|
||||||
lines.add(
|
lines.add(
|
||||||
safeKey(entry.getKey()) + " = " + serialize(entry.getValue())); // Save map data
|
escapeKeyIfNeeded(entry.getKey()) + " = " + serialize(entry.getValue())); // Save map data
|
||||||
}
|
}
|
||||||
lines.add(""); // Add empty line
|
lines.add(""); // Add empty line
|
||||||
continue;
|
continue;
|
||||||
@ -203,7 +203,7 @@ public abstract class AnnotatedConfig {
|
|||||||
return value != null ? value.toString() : "null";
|
return value != null ? value.toString() : "null";
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String safeKey(String key) {
|
protected static String escapeKeyIfNeeded(String key) {
|
||||||
if (key.contains(".") && !(key.indexOf('"') == 0 && key.lastIndexOf('"') == (key.length()
|
if (key.contains(".") && !(key.indexOf('"') == 0 && key.lastIndexOf('"') == (key.length()
|
||||||
- 1))) {
|
- 1))) {
|
||||||
return '"' + key + '"';
|
return '"' + key + '"';
|
||||||
@ -211,6 +211,14 @@ public abstract class AnnotatedConfig {
|
|||||||
return key;
|
return key;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected static String unesacpeKeyIfNeeded(String key) {
|
||||||
|
int lastIndex;
|
||||||
|
if (key.indexOf('"') == 0 && (lastIndex = key.lastIndexOf('"')) == (key.length() - 1)) {
|
||||||
|
return key.substring(1, lastIndex);
|
||||||
|
}
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Writes list of strings to file.
|
* Writes list of strings to file.
|
||||||
*
|
*
|
||||||
|
@ -487,9 +487,9 @@ public class VelocityConfiguration extends AnnotatedConfig implements ProxyConfi
|
|||||||
for (Map.Entry<String, Object> entry : toml.entrySet()) {
|
for (Map.Entry<String, Object> entry : toml.entrySet()) {
|
||||||
if (entry.getValue() instanceof String) {
|
if (entry.getValue() instanceof String) {
|
||||||
forcedHosts
|
forcedHosts
|
||||||
.put(stripQuotes(entry.getKey()), ImmutableList.of((String) entry.getValue()));
|
.put(unesacpeKeyIfNeeded(entry.getKey()), ImmutableList.of((String) entry.getValue()));
|
||||||
} else if (entry.getValue() instanceof List) {
|
} else if (entry.getValue() instanceof List) {
|
||||||
forcedHosts.put(stripQuotes(entry.getKey()),
|
forcedHosts.put(unesacpeKeyIfNeeded(entry.getKey()),
|
||||||
ImmutableList.copyOf((List<String>) entry.getValue()));
|
ImmutableList.copyOf((List<String>) entry.getValue()));
|
||||||
} else {
|
} else {
|
||||||
throw new IllegalStateException(
|
throw new IllegalStateException(
|
||||||
@ -512,14 +512,6 @@ public class VelocityConfiguration extends AnnotatedConfig implements ProxyConfi
|
|||||||
this.forcedHosts = forcedHosts;
|
this.forcedHosts = forcedHosts;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String stripQuotes(String key) {
|
|
||||||
int lastIndex;
|
|
||||||
if (key.indexOf('"') == 0 && (lastIndex = key.lastIndexOf('"')) == (key.length() - 1)) {
|
|
||||||
return key.substring(1, lastIndex);
|
|
||||||
}
|
|
||||||
return key;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "ForcedHosts{"
|
return "ForcedHosts{"
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren