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

Помогите Runnable евенты

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

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

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

    Баллы:
    61
    Имя в Minecraft:
    _SEVENTYNINE_
    Есть проблема с BukkitRunnable

    Сам метод, который я пытаюсь загрузить:
    Код:
    public void runnabledelayed() {
            new BukkitRunnable() {
    
                @Override
                public void run() {
                    for (LivingEntity e : Bukkit.getServer().getWorld("world").getLivingEntities()) {
                        e.setCustomName(ChatColor.DARK_RED + e.getType().getName() + " | " + e.getHealth());
                    }
                }
              
            }.runTaskTimer(this, 0, 40);
        }

    Код:
    public static void runnabledelayed() {
            new BukkitRunnable() {
    
                @Override
                public void run() {
                    for (LivingEntity e : Bukkit.getServer().getWorld("world").getLivingEntities()) {
                        e.setCustomName(ChatColor.DARK_RED + e.getType().getName() + " | " + e.getHealth());
                    }
                }
              
            }.runTaskTimer(new Main(), 0, 40);
        }

    В случае, если я использую метод в onEnable через главный класс (с использованием this), всё работает, как надо
    Если я использую метод с другого класса, в консоль выводит ошибку
    Код:
    [21:47:19 ERROR]: Error occurred while enabling EffectLibTestPlugin v1.0 (Is it up to date?)
    java.lang.IllegalArgumentException: Plugin already initialized!
            at org.bukkit.plugin.java.PluginClassLoader.initialize(PluginClassLoader.java:98) ~[craftbukkit-1.12.jar:git-Bukkit-9a1fc1e]
            at org.bukkit.plugin.java.JavaPlugin.<init>(JavaPlugin.java:60) ~[craftbukkit-1.12.jar:git-Bukkit-9a1fc1e]
            at ru.mascarpone.seventy.Main.<init>(Main.java:25) ~[?:?]
            at ru.mascarpone.seventy.utils.RunnableEvents.runnabledelayed(RunnableEvents.java:22) ~[?:?]
            at ru.mascarpone.seventy.Main.onEnable(Main.java:33) ~[?:?]
            at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:264) ~[craftbukkit-1.12.jar:git-Bukkit-9a1fc1e]
            at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:329) [craftbukkit-1.12.jar:git-Bukkit-9a1fc1e]
            at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:401) [craftbukkit-1.12.jar:git-Bukkit-9a1fc1e]
            at org.bukkit.craftbukkit.v1_12_R1.CraftServer.enablePlugin(CraftServer.java:360) [craftbukkit-1.12.jar:git-Bukkit-9a1fc1e]
            at org.bukkit.craftbukkit.v1_12_R1.CraftServer.enablePlugins(CraftServer.java:321) [craftbukkit-1.12.jar:git-Bukkit-9a1fc1e]
            at org.bukkit.craftbukkit.v1_12_R1.CraftServer.reload(CraftServer.java:722) [craftbukkit-1.12.jar:git-Bukkit-9a1fc1e]
            at org.bukkit.Bukkit.reload(Bukkit.java:534) [craftbukkit-1.12.jar:git-Bukkit-9a1fc1e]
            at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:25) [craftbukkit-1.12.jar:git-Bukkit-9a1fc1e]
            at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:140) [craftbukkit-1.12.jar:git-Bukkit-9a1fc1e]
            at org.bukkit.craftbukkit.v1_12_R1.CraftServer.dispatchCommand(CraftServer.java:621) [craftbukkit-1.12.jar:git-Bukkit-9a1fc1e]
            at org.bukkit.craftbukkit.v1_12_R1.CraftServer.dispatchServerCommand(CraftServer.java:607) [craftbukkit-1.12.jar:git-Bukkit-9a1fc1e]
            at net.minecraft.server.v1_12_R1.DedicatedServer.aP(DedicatedServer.java:407) [craftbukkit-1.12.jar:git-Bukkit-9a1fc1e]
            at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:371) [craftbukkit-1.12.jar:git-Bukkit-9a1fc1e]
            at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:650) [craftbukkit-1.12.jar:git-Bukkit-9a1fc1e]
            at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:554) [craftbukkit-1.12.jar:git-Bukkit-9a1fc1e]
            at java.lang.Thread.run(Unknown Source) [?:1.8.0_191]
    Caused by: java.lang.IllegalStateException: Initial initialization
            at org.bukkit.plugin.java.PluginClassLoader.initialize(PluginClassLoader.java:101) ~[craftbukkit-1.12.jar:git-Bukkit-9a1fc1e]
            at org.bukkit.plugin.java.JavaPlugin.<init>(JavaPlugin.java:60) ~[craftbukkit-1.12.jar:git-Bukkit-9a1fc1e]
            at ru.mascarpone.seventy.Main.<init>(Main.java:25) ~[?:?]
            at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_191]
            at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) ~[?:1.8.0_191]
            at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) ~[?:1.8.0_191]
            at java.lang.reflect.Constructor.newInstance(Unknown Source) ~[?:1.8.0_191]
            at java.lang.Class.newInstance(Unknown Source) ~[?:1.8.0_191]
            at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:52) ~[craftbukkit-1.12.jar:git-Bukkit-9a1fc1e]
            at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:127) ~[craftbukkit-1.12.jar:git-Bukkit-9a1fc1e]
            at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:325) ~[craftbukkit-1.12.jar:git-Bukkit-9a1fc1e]
            at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:248) ~[craftbukkit-1.12.jar:git-Bukkit-9a1fc1e]
            at org.bukkit.craftbukkit.v1_12_R1.CraftServer.loadPlugins(CraftServer.java:296) ~[craftbukkit-1.12.jar:git-Bukkit-9a1fc1e]
            at org.bukkit.craftbukkit.v1_12_R1.CraftServer.reload(CraftServer.java:720) ~[craftbukkit-1.12.jar:git-Bukkit-9a1fc1e]
            ... 10 more

    Как использовать метод не из главного класса, но чтобы он не выдавал ошибку?
     
  2. alexandrage

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

    Баллы:
    173
    Рано тебе кодить. Подучи java.
     
  3. Автор темы
    CreeperPro35

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

    Баллы:
    61
    Имя в Minecraft:
    _SEVENTYNINE_
    Спасибо за дельный совет, это решило мою проблему (нет)
     
  4. alexandrage

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

    Баллы:
    173
    Потому что ты не учил java не?
     
  5. DeethzzCoder

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

    Баллы:
    76
    Ну тк ты не можешь создать новый экземпляр мейн класса. Передавай его через конструкторы.
     
  6. MrHaber

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

    Баллы:
    66
    вызывай Main через конструкторы:
    private Main plugin;
    public classname(Main instance){
    plugin = instance;
    }
    В последствии вызывай не через. this. А через plugin.getInstance();
     
  7. DeethzzCoder

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

    Баллы:
    76
    Что за бред? Зачем инстанс получать если у тебя уже есть экземпляр мейн класса?
     
  8. Ission

    Ission Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    lokivava
    Откуда у него экземпляр main-класса из static'а?
     
  9. SaMEC

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

    Баллы:
    173
    Skype:
    support.meedway
    Имя в Minecraft:
    Nick
    Внимание ща будет костыль:lol:
    Bukkit.getPluginManager().getPlugin("nameplugin")
     
  10. DeethzzCoder

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

    Баллы:
    76
    Он предлагает ему передать мейн класс через конструктор и сохранить в переменную.
    Код:
    private Main plugin;
    
    public classname(Main instance){
        plugin = instance;
    }
    Затем он при необходимости советует юзать "plugin.getInstance()", вопрос, зачем вызывать "getInstance()" если у него уже сохранен мейн класс в качестве переменной?

    Да и так, передавать именно Main не нужно, достаточно передать Plugin.
     
  11. Venturel

    Venturel Новичок

    Баллы:
    16
    Имя в Minecraft:
    Venturel
    Гавно ваши getInstance'ы, нормальные костыльщики используют JavaPlugin.getPlugin(Main.class);
    UPD: А вот и секретные документы подъехали..
     
    Последнее редактирование: 17 янв 2019
  12. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    И чем это отличается от getInstance?)
    Шо то кал, шо это кал.
     
  13. Venturel

    Venturel Новичок

    Баллы:
    16
    Имя в Minecraft:
    Venturel
    Ну ты шо, ты понимаешь что костыльщикам нужно меньше костылить, костыль уже сделан за них.. Чувствуешь запах прогресса?

    P.S. Сам знаю про инжуктор зависимостей, и в этом случае лучше всего использовать его

     

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