mirror of
https://github.com/Multiverse/Multiverse-Core.git
synced 2025-02-21 15:01:30 +01:00
Fix crash when CommandManager calling Plugin#getConfig before config is migrated
This commit is contained in:
parent
33e440ffec
commit
a5ba42285f
@ -15,6 +15,7 @@ import com.dumptruckman.minecraft.util.Logging;
|
|||||||
import io.vavr.control.Try;
|
import io.vavr.control.Try;
|
||||||
import jakarta.inject.Inject;
|
import jakarta.inject.Inject;
|
||||||
import jakarta.inject.Provider;
|
import jakarta.inject.Provider;
|
||||||
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
import org.bukkit.configuration.serialization.ConfigurationSerialization;
|
import org.bukkit.configuration.serialization.ConfigurationSerialization;
|
||||||
import org.bukkit.plugin.PluginDescriptionFile;
|
import org.bukkit.plugin.PluginDescriptionFile;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
@ -101,7 +102,8 @@ public class MultiverseCore extends JavaPlugin implements MVCore {
|
|||||||
|
|
||||||
// Load our configs first as we need them for everything else.
|
// Load our configs first as we need them for everything else.
|
||||||
var config = configProvider.get();
|
var config = configProvider.get();
|
||||||
if (!config.isLoaded()) {
|
var loadSuccess = config.load().andThenTry(config::save).isSuccess();
|
||||||
|
if (!loadSuccess || !config.isLoaded()) {
|
||||||
Logging.severe("Your configs were not loaded.");
|
Logging.severe("Your configs were not loaded.");
|
||||||
Logging.severe("Please check your configs and restart the server.");
|
Logging.severe("Please check your configs and restart the server.");
|
||||||
this.getServer().getPluginManager().disablePlugin(this);
|
this.getServer().getPluginManager().disablePlugin(this);
|
||||||
@ -367,6 +369,40 @@ public class MultiverseCore extends JavaPlugin implements MVCore {
|
|||||||
this.pluginCount -= 1;
|
this.pluginCount -= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public @NotNull FileConfiguration getConfig() {
|
||||||
|
MVCoreConfig mvCoreConfig = this.configProvider.get();
|
||||||
|
var config = mvCoreConfig.getConfig();
|
||||||
|
if (config != null && mvCoreConfig.isLoaded()) {
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
|
||||||
|
var loadSuccess = mvCoreConfig.load().isSuccess();
|
||||||
|
if (!loadSuccess || !mvCoreConfig.isLoaded()) {
|
||||||
|
throw new RuntimeException("Failed to load configs");
|
||||||
|
}
|
||||||
|
return mvCoreConfig.getConfig();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void reloadConfig() {
|
||||||
|
this.configProvider.get().load();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void saveConfig() {
|
||||||
|
this.configProvider.get().save();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
|
@ -9,6 +9,8 @@ import java.util.Objects;
|
|||||||
import com.dumptruckman.minecraft.util.Logging;
|
import com.dumptruckman.minecraft.util.Logging;
|
||||||
import io.vavr.control.Try;
|
import io.vavr.control.Try;
|
||||||
import jakarta.inject.Inject;
|
import jakarta.inject.Inject;
|
||||||
|
import jakarta.inject.Provider;
|
||||||
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
import org.bukkit.plugin.PluginManager;
|
import org.bukkit.plugin.PluginManager;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
@ -37,7 +39,11 @@ public class MVCoreConfig implements MVConfig {
|
|||||||
private final StringPropertyHandle stringPropertyHandle;
|
private final StringPropertyHandle stringPropertyHandle;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
MVCoreConfig(@NotNull MultiverseCore core, @NotNull PluginManager pluginManager, @NotNull MVCommandManager commandManager) {
|
MVCoreConfig(
|
||||||
|
@NotNull MultiverseCore core,
|
||||||
|
@NotNull PluginManager pluginManager,
|
||||||
|
@NotNull Provider<MVCommandManager> commandManager // config needs to be instantiated before the command manager
|
||||||
|
) {
|
||||||
this.configPath = Path.of(core.getDataFolder().getPath(), CONFIG_FILENAME);
|
this.configPath = Path.of(core.getDataFolder().getPath(), CONFIG_FILENAME);
|
||||||
this.configNodes = new MVCoreConfigNodes(pluginManager, commandManager);
|
this.configNodes = new MVCoreConfigNodes(pluginManager, commandManager);
|
||||||
this.configHandle = CommentedYamlConfigHandle.builder(configPath, configNodes.getNodes())
|
this.configHandle = CommentedYamlConfigHandle.builder(configPath, configNodes.getNodes())
|
||||||
@ -73,8 +79,6 @@ public class MVCoreConfig implements MVConfig {
|
|||||||
.build())
|
.build())
|
||||||
.build();
|
.build();
|
||||||
this.stringPropertyHandle = new StringPropertyHandle(configHandle);
|
this.stringPropertyHandle = new StringPropertyHandle(configHandle);
|
||||||
load();
|
|
||||||
save();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void migrateFromOldConfigFile() {
|
private void migrateFromOldConfigFile() {
|
||||||
@ -95,8 +99,12 @@ public class MVCoreConfig implements MVConfig {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Try<Void> load() {
|
public Try<Void> load() {
|
||||||
migrateFromOldConfigFile();
|
return Try.run(this::migrateFromOldConfigFile)
|
||||||
return configHandle.load();
|
.flatMap(ignore -> configHandle.load())
|
||||||
|
.onFailure(e -> {
|
||||||
|
Logging.severe("Failed to load Multiverse-Core config.yml!");
|
||||||
|
e.printStackTrace();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -297,4 +305,12 @@ public class MVCoreConfig implements MVConfig {
|
|||||||
public boolean isShowingDonateMessage() {
|
public boolean isShowingDonateMessage() {
|
||||||
return configHandle.get(configNodes.SHOW_DONATION_MESSAGE);
|
return configHandle.get(configNodes.SHOW_DONATION_MESSAGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the underlying config file object
|
||||||
|
* @return The config file
|
||||||
|
*/
|
||||||
|
public FileConfiguration getConfig() {
|
||||||
|
return configHandle.getConfig();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ package org.mvplugins.multiverse.core.config;
|
|||||||
|
|
||||||
import com.dumptruckman.minecraft.util.Logging;
|
import com.dumptruckman.minecraft.util.Logging;
|
||||||
import io.vavr.control.Try;
|
import io.vavr.control.Try;
|
||||||
|
import jakarta.inject.Provider;
|
||||||
import org.bukkit.plugin.PluginManager;
|
import org.bukkit.plugin.PluginManager;
|
||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
@ -19,9 +20,9 @@ class MVCoreConfigNodes {
|
|||||||
|
|
||||||
private final NodeGroup nodes = new NodeGroup();
|
private final NodeGroup nodes = new NodeGroup();
|
||||||
private PluginManager pluginManager;
|
private PluginManager pluginManager;
|
||||||
private MVCommandManager commandManager;
|
private Provider<MVCommandManager> commandManager;
|
||||||
|
|
||||||
MVCoreConfigNodes(@NotNull PluginManager pluginManager, @NotNull MVCommandManager commandManager) {
|
MVCoreConfigNodes(@NotNull PluginManager pluginManager, @NotNull Provider<MVCommandManager> commandManager) {
|
||||||
this.pluginManager = pluginManager;
|
this.pluginManager = pluginManager;
|
||||||
this.commandManager = commandManager;
|
this.commandManager = commandManager;
|
||||||
}
|
}
|
||||||
@ -199,7 +200,7 @@ class MVCoreConfigNodes {
|
|||||||
.defaultValue(Locale.ENGLISH)
|
.defaultValue(Locale.ENGLISH)
|
||||||
.name("default-locale")
|
.name("default-locale")
|
||||||
.onSetValue((oldValue, newValue) -> {
|
.onSetValue((oldValue, newValue) -> {
|
||||||
commandManager.getLocales().setDefaultLocale(newValue);
|
commandManager.get().getLocales().setDefaultLocale(newValue);
|
||||||
})
|
})
|
||||||
.build());
|
.build());
|
||||||
|
|
||||||
@ -211,7 +212,7 @@ class MVCoreConfigNodes {
|
|||||||
.name("per-player-locale")
|
.name("per-player-locale")
|
||||||
.onSetValue((oldValue, newValue) -> {
|
.onSetValue((oldValue, newValue) -> {
|
||||||
// autoDetectFromClient will be done by MVLocalesListener instead
|
// autoDetectFromClient will be done by MVLocalesListener instead
|
||||||
commandManager.usePerIssuerLocale(newValue, false);
|
commandManager.get().usePerIssuerLocale(newValue, false);
|
||||||
})
|
})
|
||||||
.build());
|
.build());
|
||||||
|
|
||||||
|
@ -3,14 +3,18 @@ multiverse-configuration:
|
|||||||
enforceaccess: 'true'
|
enforceaccess: 'true'
|
||||||
prefixchat: 'false'
|
prefixchat: 'false'
|
||||||
prefixchatformat: '[%world%]>>%chat%'
|
prefixchatformat: '[%world%]>>%chat%'
|
||||||
|
useasyncchat: 'true'
|
||||||
teleportintercept: 'false'
|
teleportintercept: 'false'
|
||||||
firstspawnoverride: 'true'
|
firstspawnoverride: 'true'
|
||||||
displaypermerrors: 'false'
|
displaypermerrors: 'false'
|
||||||
|
enablebuscript: 'false'
|
||||||
globaldebug: '2'
|
globaldebug: '2'
|
||||||
silentstart: 'false'
|
silentstart: 'false'
|
||||||
|
messagecooldown: '5000'
|
||||||
version: '2.9'
|
version: '2.9'
|
||||||
firstspawnworld: world
|
firstspawnworld: world
|
||||||
|
teleportcooldown: '1000'
|
||||||
defaultportalsearch: 'true'
|
defaultportalsearch: 'true'
|
||||||
portalsearchradius: '128'
|
portalsearchradius: '128'
|
||||||
autopurge: 'true'
|
autopurge: 'true'
|
||||||
idonotwanttodonate: 'true'
|
idonotwanttodonate: 'true'
|
||||||
|
Loading…
Reference in New Issue
Block a user