OkaeriPoland / okaeri-configs

Simple Java/POJO config library written with love and Lombok
MIT License
77 stars 11 forks source link

Problem z mapą objektów z rozserzeniem OkaeriConfigs #15

Closed arthurr0 closed 3 years ago

arthurr0 commented 3 years ago
java.lang.NullPointerException: Cannot invoke "java.util.Map.put(Object, Object)" because "this.this$0.flags" is null
    at pl.minecodes.mineplots.data.configuration.PlotsConfiguration$1.<init>(PlotsConfiguration.java:50) ~[?:?]
    at pl.minecodes.mineplots.data.configuration.PlotsConfiguration.<init>(PlotsConfiguration.java:48) ~[?:?]
    at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:?]
    at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:78) ~[?:?]
    at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:?]
    at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[?:?]
    at java.lang.reflect.ReflectAccess.newInstance(ReflectAccess.java:128) ~[?:?]
    at jdk.internal.reflect.ReflectionFactory.newInstance(ReflectionFactory.java:350) ~[?:?]
    at java.lang.Class.newInstance(Class.java:642) ~[?:?]
    at pl.minecodes.mineplots.data.okaeriConfigsConfigManager.create(okaeriConfigsConfigManager.java:23) ~[?:?]
    at pl.minecodes.mineplots.data.okaeriConfigsConfigManager.create(okaeriConfigsConfigManager.java:50) ~[?:?]
    at pl.minecodes.mineplots.Plots.onEnable(Plots.java:19) ~[?:?]
    at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:263) ~[patched_1.17.jar:git-Paper-74]
    at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:370) ~[patched_1.17.jar:git-Paper-74]
    at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:500) ~[patched_1.17.jar:git-Paper-74]
    at org.bukkit.craftbukkit.v1_17_R1.CraftServer.enablePlugin(CraftServer.java:518) ~[patched_1.17.jar:git-Paper-74]
    at org.bukkit.craftbukkit.v1_17_R1.CraftServer.enablePlugins(CraftServer.java:432) ~[patched_1.17.jar:git-Paper-74]
    at org.bukkit.craftbukkit.v1_17_R1.CraftServer.reload(CraftServer.java:957) ~[patched_1.17.jar:git-Paper-74]
    at org.bukkit.Bukkit.reload(Bukkit.java:769) ~[patched_1.17.jar:git-Paper-74]
    at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:54) ~[patched_1.17.jar:git-Paper-74]
    at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:159) ~[patched_1.17.jar:git-Paper-74]
    at org.bukkit.craftbukkit.v1_17_R1.CraftServer.dispatchCommand(CraftServer.java:821) ~[patched_1.17.jar:git-Paper-74]
    at org.bukkit.craftbukkit.v1_17_R1.CraftServer.dispatchServerCommand(CraftServer.java:784) ~[patched_1.17.jar:git-Paper-74]
    at net.minecraft.server.dedicated.DedicatedServer.handleConsoleInputs(DedicatedServer.java:516) ~[patched_1.17.jar:git-Paper-74]
    at net.minecraft.server.dedicated.DedicatedServer.tickChildren(DedicatedServer.java:478) ~[patched_1.17.jar:git-Paper-74]
    at net.minecraft.server.MinecraftServer.tickServer(MinecraftServer.java:1404) ~[patched_1.17.jar:git-Paper-74]
    at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1180) ~[patched_1.17.jar:git-Paper-74]
    at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:320) ~[patched_1.17.jar:git-Paper-74]
    at java.lang.Thread.run(Thread.java:831) [?:?]
CDFN commented 3 years ago

Prawdopodobnie próbujesz wrzucić nulla do configu - to nie przejdzie. Wrzucaj zamiast tego pustą mapę, jeżeli nie chcesz żadnych danych. A jeżeli to nie to to przydałby się kod.

dasavick commented 3 years ago

Zdecydowanie wygląda to na problem samego sposobu inicjalizacji. Przydałoby się, zamiast samych stacktrace wrzucać też klasę configu i sposób ładowania jak robisz zgłoszenia.

arthurr0 commented 3 years ago

Sorki zapomniałem :(

    @Comment("[#] Konfigurowanie flag.")
    Map<FlagType, Flag> flags = new HashMap<>() {{
        flags.put(FlagType.BUILD, new Flag("Budowanie", "Możliwość budowania bloków.", false, true));
        flags.put(FlagType.DESTROY, new Flag("Niszczenie", "Możliwość niszczenia bloków.", false, true));
        flags.put(FlagType.CHEST, new Flag("Otwieranie skrzynek", "Możliwość otwierania skrzyń.", true, true));
    }};

@EqualsAndHashCode(callSuper = true)
@Data
@AllArgsConstructor
public class Flag extends OkaeriConfig {

    @Comment("[#] Wyświetlana nazwa flagi.")
    private String displayName;

    @Comment("[#] Opis flagi.")
    private String description;

    @Comment("[#] Możliwość zmiany flagi.")
    private boolean configurable;

    @Comment("[#] Czy flaga powinna być domyślną.")
    private boolean defaultFlag;

}
dasavick commented 3 years ago

Źle używasz double brace initialisation. To nigdy nie miało prawo działać, nie widzę takiej opcji nawet poza configami. Zamiast flags.put powinno być this.put.