Помогите WorldGuard не инициализирует мой флаг

Статус
Закрыто для дальнейших ответов.

php5master

Активный участник
Пользователь
Баллы
66
Практически точь в точь скопипастил с документации, а WorldGuard меня посылает на три весёлые буквы после второго запуска. В чём причина?
Код:
@Override
public void onLoad() {
    instance = this;
    // ...
    // Init WG flag
    FlagRegistry registry = WorldGuardPlugin.inst().getFlagRegistry();
    try {
        StringFlag flag = new StringFlag("spawn-control-group");
        registry.register(flag);
        GROUP_FLAG = flag; // only set our field if there was no error
    } catch (FlagConflictException e) {
        Flag<?> existing = registry.get("spawn-control-group");
        if (existing instanceof StringFlag) {
            GROUP_FLAG = (StringFlag) existing;
        } else {
            printInConsole("Какие-то плагины конфликтуют с флагом %s","spawn-control-group");
        }
    }

}
[18:21:08] [Server thread/ERROR]: Error occurred while enabling WorldGuard v6.2.2-SNAPSHOT;8eeab68 (Is it up to date?)
com.sk89q.worldguard.protection.flags.registry.FlagConflictException: A flag already exists by the name spawn-control-group
at com.sk89q.worldguard.protection.flags.registry.SimpleFlagRegistry.forceRegister(SimpleFlagRegistry.java:84) ~[?:?]
at com.sk89q.worldguard.protection.flags.registry.SimpleFlagRegistry.unmarshal(SimpleFlagRegistry.java:145) ~[?:?]
at com.sk89q.worldguard.protection.managers.storage.file.YamlRegionFile.setFlags(YamlRegionFile.java:288) ~[?:?]
at com.sk89q.worldguard.protection.managers.storage.file.YamlRegionFile.loadAll(YamlRegionFile.java:158) ~[?:?]
at com.sk89q.worldguard.protection.managers.RegionManager.load(RegionManager.java:101) ~[?:?]
at com.sk89q.worldguard.protection.managers.RegionContainerImpl.createAndLoad(RegionContainerImpl.java:129) ~[?:?]
at com.sk89q.worldguard.protection.managers.RegionContainerImpl.load(RegionContainerImpl.java:106) ~[?:?]
at com.sk89q.worldguard.bukkit.RegionContainer.load(RegionContainer.java:193) ~[?:?]
at com.sk89q.worldguard.bukkit.RegionContainer.loadWorlds(RegionContainer.java:157) ~[?:?]
at com.sk89q.worldguard.bukkit.RegionContainer.initialize(RegionContainer.java:93) ~[?:?]
at com.sk89q.worldguard.bukkit.WorldGuardPlugin.onEnable(WorldGuardPlugin.java:203) ~[?:?]
at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:264) ~[spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:337) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:403) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
at org.bukkit.craftbukkit.v1_12_R1.CraftServer.enablePlugin(CraftServer.java:381) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
at org.bukkit.craftbukkit.v1_12_R1.CraftServer.enablePlugins(CraftServer.java:330) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
at net.minecraft.server.v1_12_R1.MinecraftServer.t(MinecraftServer.java:422) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
at net.minecraft.server.v1_12_R1.MinecraftServer.l(MinecraftServer.java:383) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
at net.minecraft.server.v1_12_R1.MinecraftServer.a(MinecraftServer.java:338) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
at net.minecraft.server.v1_12_R1.DedicatedServer.init(DedicatedServer.java:272) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:545) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_241]
 
Флаги можно регать только один раз на запуске сервера.
Так, я немножко не допёр: флаг нужно регать при каждом старте сервера, или сначала один раз зарегистрировать, затем при каждом onLoad проверять? Если второе, то как это делать?
 
Так, я немножко не допёр: флаг нужно регать при каждом старте сервера, или сначала один раз зарегистрировать, затем при каждом onLoad проверять? Если второе, то как это делать?
Не нужно самому вызывать метод onLoad, он сам вызывается на загрузке сервера.
 
Я понимаю, что onLoad вызывается спиготом.
Я спросил про то, что registry.register(...) вызывать надо только при первом запуске плагина или при последующих тоже?
И если второе, то как проверить?

P.S. Выяснил, что FlagConflictException это RuntimeException(а он не проверяется). Видать из-за этого всё и работает хреново.
 
Я спросил про то, что registry.register(...) вызывать надо только при первом запуске плагина или при последующих тоже?
Регистратор флагов нужно запускать только до загрузки wg. Такой плагин нельзя релоадить никогда
 
Регистратор флагов нужно запускать только до загрузки wg. Такой плагин нельзя релоадить никогда
Ну я и прописал регистрацию флага в onLoad, потом использую только GROUP_FLAG. В чём проблема то? У меня крашит при лоадинге плагинов.
 
Ну я и прописал регистрацию флага в onLoad, потом использую только GROUP_FLAG. В чём проблема то? У меня крашит при лоадинге плагинов.
Ты точно ничем не перезагружал свой плагин? Если нет, то другой какой то плагин зарегал флаг с тем именем.
 
Ребят, может у кого-то пример найдётся? Я долблюсь башкой об стол уже какой день и не понимаю, в чём дело.
 
Я так делаю
Код:
    @Override
    public void onLoad() {
        FlagRegistry reg = WorldGuard.getInstance().getFlagRegistry();
        reg.register(Flag1.getInstance());
        reg.register(Flag2.getInstance());
        reg.register(Flag3.getInstance());
    }
 
Переименовал флаг на spawn-control и всё фурычит. Не знаю, что за магия такая...
alexandrage, благодарю за помощь.

UPD.: Пообщался в Дискорде EngineHub. Там пояснили, что флаги, кончающиеся на -group зарезервированы WorldGuardом, их использование в собственных плагинах может вызывать ошибки.
 
Последнее редактирование:
Статус
Закрыто для дальнейших ответов.
Назад
Верх