1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Как сделать проверку всех значений из конфига?

Тема в разделе "Разработка плагинов для новичков", создана пользователем Raidark, 23 мар 2020.

Статус темы:
Закрыта.
  1. Автор темы
    Raidark

    Raidark Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    Raidark
    Всем привет! Я пытаюсь написать свой первый плагин. Плагин дает опыт когда ломаешь блок( значение опыта и id блока берется из конфига)
    Код:
    1:
     id: "GRASS"
     amount: 50
    2:
     id: "STONE"
     amount: 500
    3:
     id: "CHEST"
     amount: 5000
    Исходя из кода видно, что берется только первый элемент из конфига. Как сделать, чтобы учитывались все элементы из конфига? В будущем их будет несколько сотен.

    Код:
    @EventHandler
        public void giveExp(BlockBreakEvent e) {
            Player p = e.getPlayer();
            Block b = e.getBlock();
            String id = plugin.getConfig().getString("1"+".id");
            String exp1 = plugin.getConfig().getString("1"+ ".amount");
            int exp = Integer.parseInt (exp1);
           
            if(b.getType() != Material.getMaterial(id)) return; e.setExpToDrop(exp);
     
  2. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Смени цифру и выведет другое. Логично же с твоим конфигом.
     
  3. Автор темы
    Raidark

    Raidark Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    Raidark
    Так мне нужно, чтобы он все цифры из конфига учитывал, а они в дальнейшем будут еще добавляться.
     
  4. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Тогда юзай в качестве ключа сам материал. Так проще же нет? Если ты не знаешь какой номер куда ведет.
     
  5. Автор темы
    Raidark

    Raidark Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    Raidark
    Суть в том, что в конфиге будет, например, 500 блоков и у каждого блока свое значение опыта. Нужно сделать так, чтобы когда игрок добывает блоки, учитывались сразу все 500 блоков из конфига и ему начислялся опыт.
     
  6. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Код:
    GRASS:
     amount: 50
    STONE:
     amount: 500
    CHEST:
     amount: 5000
     
  7. Автор темы
    Raidark

    Raidark Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    Raidark
    даже если так, мне что сюда тогда прописывать, я же могу написать сюда только один материал из 500.
    Код:
    String id = plugin.getConfig().getString("GRASS");
     
  8. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Код:
    ConfigurationSection section = plugin.getConfig().getConfigurationSection(block.getType().name());
    section.getInt("amount");
     
  9. Автор темы
    Raidark

    Raidark Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    Raidark
    что-то я совсем запутался, теперь непонятно что прописывать вместо id и exp
    Код:
    if(b.getType() != Material.getMaterial(id)) return; e.setExpToDrop(exp);
     
  10. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Код:
    ConfigurationSection section = plugin.getConfig().getConfigurationSection(b.getType().name());
    e.setExpToDrop(section.getInt("amount"))
     
  11. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Ну и проверну на null добавишь, если в списке не все блоки кубача будут.
     
  12. Автор темы
    Raidark

    Raidark Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    Raidark
    Спасибо огромное, а то долго мучался с этой темой.
     
  13. Автор темы
    Raidark

    Raidark Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    Raidark
    Не хотел в тот раз больше напрягать тебя и пробовал сделать проверку на null сам, но уже сколько мучаюсь, не выходит. Вот что у меня получилось, но это естественно не работает.
    Код:
    if (b.getType().name() != null ) e.setExpToDrop(0);    
     
  14. NukerFall

    NukerFall Активный участник Пользователь

    Баллы:
    76
    if (plugin.getConfig().getConfigurationSection(b.getType().name()) != null)
     
  15. NukerFall

    NukerFall Активный участник Пользователь

    Баллы:
    76
  16. Автор темы
    Raidark

    Raidark Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    Raidark
    не работает
     
  17. Автор темы
    Raidark

    Raidark Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    Raidark
  18. NukerFall

    NukerFall Активный участник Пользователь

    Баллы:
    76
    что именно? Конкретнее код и ошибку
     
  19. Автор темы
    Raidark

    Raidark Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    Raidark
    теперь вообще не начисляется опыт и та же ошибка в консоли.
    Вот код:
    Код:
    @EventHandler
        public void giveExp(BlockBreakEvent e) {
            Block b = e.getBlock();      
            if (plugin.getConfig().getConfigurationSection(b.getType().name())!= null);  
           
            else {
            ConfigurationSection section1 = plugin.getConfig().getConfigurationSection(b.getType().name());
            e.setExpToDrop(section1.getInt("amount"));
    } } }
    Вот ошибка:

    Код:
    org.bukkit.event.EventException: null
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
            at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
            at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:500) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
            at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:485) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
            at net.minecraft.server.v1_12_R1.PlayerInteractManager.breakBlock(PlayerInteractManager.java:290) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
            at net.minecraft.server.v1_12_R1.PlayerInteractManager.a(PlayerInteractManager.java:123) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
            at net.minecraft.server.v1_12_R1.PlayerConnection.a(PlayerConnection.java:877) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
            at net.minecraft.server.v1_12_R1.PacketPlayInBlockDig.a(SourceFile:40) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
            at net.minecraft.server.v1_12_R1.PacketPlayInBlockDig.a(SourceFile:10) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
            at net.minecraft.server.v1_12_R1.PlayerConnectionUtils$1.run(SourceFile:13) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
            at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_111]
            at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_111]
            at net.minecraft.server.v1_12_R1.SystemUtils.a(SourceFile:46) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
            at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:748) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
            at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:406) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
            at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:679) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
            at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:577) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
            at java.lang.Thread.run(Unknown Source) [?:1.8.0_111]
    Caused by: java.lang.NullPointerException
            at main.Handler.giveExp?(Handler.java:22) ~[?:?]
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_111]
            at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_111]
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_111]
            at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_111]
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) ~[spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
            ... 17 more
     
  20. NukerFall

    NukerFall Активный участник Пользователь

    Баллы:
    76
    чо ты за хню написал?
    Код:
    @EventHandler
    public void onBreak(BlockBreakEvent e) {
        Block b = e.getBlock();
        if (plugin.getConfig().getConfigurationSection(b.getType().name()) != null) {
            ConfigurationSection section1 = plugin.getConfig().getConfigurationSection(b.getType().name());
            e.setExpToDrop(section1.getInt("amount"));
        }
    }
    
     
Статус темы:
Закрыта.

Поделиться этой страницей