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

Помогите пытаюсь разобраться с шудлером/задержкой ничего не понимаю

Тема в разделе "Разработка плагинов для новичков", создана пользователем Bezobrazie, 5 май 2021.

  1. Автор темы
    Bezobrazie

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

    Баллы:
    46
    Имя в Minecraft:
    MySoulIsCry
    Проблема думаю ясна. Я знаю что в гугле 1КК решений но я не могу понять что я делаю не так.
    Сейчас код выглядит так
    Код:
            Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
                @Override
                public void run() {
                    loc.getBlock().setType(Material.OAK_LOG);
                }
            }, 20L); 
    
    он был взят из гугла. но он выдает огромную ошибку в консоль.
    Код:
    [14:03:49] [Server thread/ERROR]: Could not pass event BlockBreakEvent to OneBlockChallenge v0.0.1
    org.bukkit.event.EventException: null
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:319) ~[1.16.5.jar:2991-Spigot-018b9a0-f3f3094]
            at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[1.16.5.jar:2991-Spigot-018b9a0-f3f3094]
            at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:589) [1.16.5.jar:2991-Spigot-018b9a0-f3f3094]
            at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:576) [1.16.5.jar:2991-Spigot-018b9a0-f3f3094]
            at net.minecraft.server.v1_16_R3.PlayerInteractManager.breakBlock(PlayerInteractManager.java:309) [1.16.5.jar:2991-Spigot-018b9a0-f3f3094]
            at net.minecraft.server.v1_16_R3.PlayerInteractManager.a(PlayerInteractManager.java:268) [1.16.5.jar:2991-Spigot-018b9a0-f3f3094]
            at net.minecraft.server.v1_16_R3.PlayerInteractManager.a(PlayerInteractManager.java:162) [1.16.5.jar:2991-Spigot-018b9a0-f3f3094]
            at net.minecraft.server.v1_16_R3.PlayerConnection.a(PlayerConnection.java:1297) [1.16.5.jar:2991-Spigot-018b9a0-f3f3094]
            at net.minecraft.server.v1_16_R3.PacketPlayInBlockDig.a(SourceFile:40) [1.16.5.jar:2991-Spigot-018b9a0-f3f3094]
            at net.minecraft.server.v1_16_R3.PacketPlayInBlockDig.a(SourceFile:10) [1.16.5.jar:2991-Spigot-018b9a0-f3f3094]
            at net.minecraft.server.v1_16_R3.PlayerConnectionUtils.lambda$0(PlayerConnectionUtils.java:19) [1.16.5.jar:2991-Spigot-018b9a0-f3f3094]
            at net.minecraft.server.v1_16_R3.PlayerConnectionUtils$$Lambda$4085/904383845.run(Unknown Source) [1.16.5.jar:2991-Spigot-018b9a0-f3f3094]
            at net.minecraft.server.v1_16_R3.TickTask.run(SourceFile:18) [1.16.5.jar:2991-Spigot-018b9a0-f3f3094]
            at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeTask(SourceFile:144) [1.16.5.jar:2991-Spigot-018b9a0-f3f3094]
            at net.minecraft.server.v1_16_R3.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23) [1.16.5.jar:2991-Spigot-018b9a0-f3f3094]
            at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeNext(SourceFile:118) [1.16.5.jar:2991-Spigot-018b9a0-f3f3094]
            at net.minecraft.server.v1_16_R3.MinecraftServer.bb(MinecraftServer.java:942) [1.16.5.jar:2991-Spigot-018b9a0-f3f3094]
            at net.minecraft.server.v1_16_R3.MinecraftServer.executeNext(MinecraftServer.java:935) [1.16.5.jar:2991-Spigot-018b9a0-f3f3094]
            at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.awaitTasks(SourceFile:127) [1.16.5.jar:2991-Spigot-018b9a0-f3f3094]
            at net.minecraft.server.v1_16_R3.MinecraftServer.sleepForTick(MinecraftServer.java:919) [1.16.5.jar:2991-Spigot-018b9a0-f3f3094]
            at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:851) [1.16.5.jar:2991-Spigot-018b9a0-f3f3094]
            at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$0(MinecraftServer.java:164) [1.16.5.jar:2991-Spigot-018b9a0-f3f3094]
            at net.minecraft.server.v1_16_R3.MinecraftServer$$Lambda$3178/911264794.run(Unknown Source) [1.16.5.jar:2991-Spigot-018b9a0-f3f3094]
            at java.lang.Thread.run(Unknown Source) [?:1.8.0_51]
    Caused by: java.lang.IllegalArgumentException: An objective of name '╨С╨╗╨╛╨║╨╕' already exists
            at org.apache.commons.lang.Validate.isTrue(Validate.java:136) ~[1.16.5.jar:2991-Spigot-018b9a0-f3f3094]
            at org.bukkit.craftbukkit.v1_16_R3.scoreboard.CraftScoreboard.registerNewObjective(CraftScoreboard.java:45) ~[1.16.5.jar:2991-Spigot-018b9a0-f3f3094]
            at org.bukkit.craftbukkit.v1_16_R3.scoreboard.CraftScoreboard.registerNewObjective(CraftScoreboard.java:34) ~[1.16.5.jar:2991-Spigot-018b9a0-f3f3094]
            at org.bukkit.craftbukkit.v1_16_R3.scoreboard.CraftScoreboard.registerNewObjective(CraftScoreboard.java:29) ~[1.16.5.jar:2991-Spigot-018b9a0-f3f3094]
            at org.bukkit.craftbukkit.v1_16_R3.scoreboard.CraftScoreboard.registerNewObjective(CraftScoreboard.java:1) ~[1.16.5.jar:2991-Spigot-018b9a0-f3f3094]
            at ru.OBC.ListenerE.blockevent(ListenerE.java:53) ~[?:?]
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_51]
            at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_51]
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_51]
            at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_51]
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:315) ~[1.16.5.jar:2991-Spigot-018b9a0-f3f3094]
            ... 23 more
    
     
  2. alexandrage

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

    Баллы:
    173
    Так иди подбирай свои решения.
     
  3. Автор темы
    Bezobrazie

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

    Баллы:
    46
    Имя в Minecraft:
    MySoulIsCry
    я бы сюда не лез если бы не потратил на это много времени
     
  4. PifPafich

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

    Баллы:
    66
    Имя в Minecraft:
    steklopaKet32_46
  5. alexandrage

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

    Баллы:
    173
  6. Автор темы
    Bezobrazie

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

    Баллы:
    46
    Имя в Minecraft:
    MySoulIsCry
    нельзя просто сказать в чем ошибка?
     
  7. alexandrage

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

    Баллы:
    173
    Caused by: java.lang.IllegalArgumentException: An objective of name '╨С╨╗╨╛╨║╨╕' already exists
     
  8. Автор темы
    Bezobrazie

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

    Баллы:
    46
    Имя в Minecraft:
    MySoulIsCry
    ниче не понял
     
  9. Автор темы
    Bezobrazie

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

    Баллы:
    46
    Имя в Minecraft:
    MySoulIsCry
    понял что уже существует объект с именем но не понял где оно вообще есть я ниче не указывал
     
  10. Автор темы
    Bezobrazie

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

    Баллы:
    46
    Имя в Minecraft:
    MySoulIsCry
    видимо ошибка Caused by: java.lang.IllegalArgumentException: Plugin cannot be null гдето в конструкторе
    Код:
        private Main plugin;
        public RandomTutorial(Main main) {
        this.plugin = main;
        }
    
    не пойму что не так
     
  11. alexandrage

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

    Баллы:
    173
    Ну подними задницу да поищи где ты регистрируешь registerNewObjective. Уже и так на ошибку указал.
    И утверждает тут сидит, что весь гугл перерыл.
     
  12. _MRDen3000YT_

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

    Баллы:
    76
    Код весь скинь.
     
  13. Sturm_PT

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

    Баллы:
    76
    Ты при создании объекта передал туда null, как советует eclipse? Молодец. Когда регистрируешь слушатель в главном классе, передавай туда ссылку this
     
  14. Автор темы
    Bezobrazie

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

    Баллы:
    46
    Имя в Minecraft:
    MySoulIsCry
    перебираю миллион вариков щас он выглядит так
    Код:
    public class RandomTutorial {
    
    
        private final RandomTutorial plugin;
    
        public RandomTutorial(RandomTutorial plugin) {
            this.plugin = plugin;
        }
    
        public RandomTutorial(ListenerE listenerE) {
            this.plugin = null;
            // TODO Auto-generated constructor stub
        }
    
        public void random(int x, int y, int z, Location loc, Player p) {
          
    
          
            int d = (int) (Math.random() * 11);
      
            p.sendMessage("§cчисло: " + d);
    
              
            p.spawnParticle(Particle.CLOUD, new Location(p.getWorld(), (x+0.5) + Math.random(), (y+0.5)+ Math.random(), (z+0.5)+ Math.random()), (int) 0.99999);
            p.spawnParticle(Particle.CLOUD, new Location(p.getWorld(), (x+0.5) - Math.random(), (y+0.5)- Math.random(), (z+0.5)- Math.random()), (int) 0.99999);
            p.spawnParticle(Particle.CLOUD, new Location(p.getWorld(), (x+0.5) - Math.random(), (y+0.5)- Math.random(), (z+0.5)+ Math.random()), (int) 0.99999);
            p.spawnParticle(Particle.CLOUD, new Location(p.getWorld(), (x+0.5) + Math.random(), (y+0.5)- Math.random(), (z+0.5)- Math.random()), (int) 0.99999);
    
            //Bukkit.getScheduler().runTask(plugin, () -> loc.getBlock().setType(Material.OAK_LOG));
            p.sendMessage("дебаг0");
    
            Bukkit.getScheduler().scheduleSyncDelayedTask((Plugin) plugin, new Runnable() {
                @Override
                public void run() {
                    loc.getBlock().setType(Material.OAK_LOG);
                }
            }, 20L);
          
    
        }
      
      
    
    }
    
    ошибка Caused by: java.lang.IllegalArgumentException: Plugin cannot be null
    метод в этом классе вызывается в другом классе который является слушателем разрушения блока
     
  15. _MRDen3000YT_

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

    Баллы:
    76
    Кидай класс где ты передаешь плагин
    ??
     
  16. Sturm_PT

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

    Баллы:
    76
    Скинь главный класс, чует сердце, что ты null передал. Интуиция говорит.
     
  17. Автор темы
    Bezobrazie

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

    Баллы:
    46
    Имя в Minecraft:
    MySoulIsCry
    класс листенера
    Код:
    public class ListenerE implements Listener {
    
    
        private Main plugin;
        public ListenerE(Main main) {
        this.plugin = main;
        }
    
        @EventHandler
        private void blockevent(BlockBreakEvent e)
        {
            Location loc = e.getBlock().getLocation();
            int x = loc.getBlockX();
            int y = loc.getBlockY();
            int z = loc.getBlockZ();
            Player p = e.getPlayer();
            World w = p.getWorld();
           
            if (x == 0 && z == 0 && y == 61)
            {
                RandomTutorial randomTutorial = new RandomTutorial(this);
                randomTutorial.random(x, y, z, loc, p);
                plugin.getConfig().set("block1.progress", plugin.getConfig().getInt("block1.progress")+1);
                plugin.getConfig().set(p + ".progress", plugin.getConfig().getInt(p + ".progress")+1);
                String prog = plugin.getConfig().getString(p + ".progress");
                plugin.saveConfig();
               
                p.sendTitle("Сломано блоков: ", plugin.getConfig().getString(p + ".progress"));
               
               /* ScoreboardManager manager = Bukkit.getScoreboardManager();
                Scoreboard board = manager.getNewScoreboard();
               
                Objective objective1 = board.registerNewObjective("list", prog);
               
                Objective objective = board.registerNewObjective("showhealth", "health");
               
                objective.setDisplaySlot(DisplaySlot.BELOW_NAME);
                objective.setDisplayName(prog);
                objective1.setDisplaySlot(DisplaySlot.PLAYER_LIST);
                p.setScoreboard(board);
                objective1.getScore(p);*/
    
               
               
            }
    
        }
    }
    
    главный класс
    Код:
    public class Main extends JavaPlugin {
       
    
    
        Logger log = Logger.getLogger("Minecraft");
        //Получить доступ к консоли
        public File file = new File(getDataFolder() + File.separator + "config.yml");
        public FileConfiguration fileConfig = YamlConfiguration.loadConfiguration(file);
        //В этом коде переменная - fileConfig - для конфиг файла config.yml
        public File file2 = new File(getDataFolder() + File.separator + "data.yml");
        public FileConfiguration fileConfig2 = YamlConfiguration.loadConfiguration(file);
        //В этом коде переменная - fileConfig2 - для доп. конфиг файла playerdata.yml
    
        FileConfiguration conf = getConfig();
    
    
        public void onEnable() {
            Bukkit.getPluginManager().registerEvents(new ListenerE(this), this);
            Bukkit.getConsoleSender().sendMessage(ChatColor.RED + " / "); // оформление ебашь с красным или каким хочешь цветом, ок да?
            log.info("Enabled.");
            if (!this.file.exists() ) {    //Если файла не существует
                saveResource("config.yml", true); //То копирование при запуске  сервера доп. конфиг файла config.yml
            }
           
    
    
            saveDefaultConfig();
            if (!this.file2.exists() ) {    //Если файла не существует
                this.fileConfig2.set("Command","data" ); // То присваиваем переменной Config2 -данные со строкой Command- и значением -data
                saveCfg();    // Сохраняем данные из переменной в конфиг custom.yml
                // к строке saveCfg();  Мы создаем метод ниже
            }}
        private void saveCfg() {
            try {
                fileConfig2.save(file2);
            } catch (Exception e) {
                e.printStackTrace();
            }
    
        }
        public void onDisable() {
            this.saveConfig();
        }
    
    }
    
    
     
  18. _MRDen3000YT_

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

    Баллы:
    76
    RandomTutorial randomTutorial = new RandomTutorial(plugin);
    randomTutorial.random(x, y, z, loc, p);
    PHP:
    public class RandomTutorial {


        private final 
    RandomTutorial plugin;

        public 
    RandomTutorial(RandomTutorial plugin) {
            
    this.plugin plugin;
        }
        public 
    void random(int xint yint zLocation locPlayer p) {
          

          
            
    int d = (int) (Math.random() * 11);
     
            
    p.sendMessage("§cчисло: " d);

              
            
    p.spawnParticle(Particle.CLOUD, new Location(p.getWorld(), (x+0.5) + Math.random(), (y+0.5)+ Math.random(), (z+0.5)+ Math.random()), (int) 0.99999);
            
    p.spawnParticle(Particle.CLOUD, new Location(p.getWorld(), (x+0.5) - Math.random(), (y+0.5)- Math.random(), (z+0.5)- Math.random()), (int) 0.99999);
            
    p.spawnParticle(Particle.CLOUD, new Location(p.getWorld(), (x+0.5) - Math.random(), (y+0.5)- Math.random(), (z+0.5)+ Math.random()), (int) 0.99999);
            
    p.spawnParticle(Particle.CLOUD, new Location(p.getWorld(), (x+0.5) + Math.random(), (y+0.5)- Math.random(), (z+0.5)- Math.random()), (int) 0.99999);

            
    //Bukkit.getScheduler().runTask(plugin, () -> loc.getBlock().setType(Material.OAK_LOG));
            
    p.sendMessage("дебаг0");

            
    Bukkit.getScheduler().scheduleSyncDelayedTask((Pluginplugin, new Runnable() {
                @
    Override
                
    public void run() {
                    
    loc.getBlock().setType(Material.OAK_LOG);
                }
            }, 
    20L);
          

        }
     
     

    }
    УЧИ ЯВУ!
     
  19. Автор темы
    Bezobrazie

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

    Баллы:
    46
    Имя в Minecraft:
    MySoulIsCry
    выдает ошибку в листенере, я уже пытался так сделать но ошибка
    upload_2021-5-5_15-55-19.png
     
  20. _MRDen3000YT_

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

    Баллы:
    76
    .
     

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