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

Помогите NoClassDefFoundError

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

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

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

    Баллы:
    76
    В общем, периодически возникает такая ошибочка красивая:
    Код:
    [22:56:59] [Server thread/ERROR]: Could not pass event EntityDamageByEntityEvent to mobwars v1337
    org.bukkit.event.EventException: null
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot.jar:git-Spigot-596221b-9a1fc1e]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot.jar:git-Spigot-596221b-9a1fc1e]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:499) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:484) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at org.bukkit.craftbukkit.v1_12_R1.event.CraftEventFactory.callEvent(CraftEventFactory.java:92) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at org.bukkit.craftbukkit.v1_12_R1.event.CraftEventFactory.callEntityDamageEvent(CraftEventFactory.java:579) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at org.bukkit.craftbukkit.v1_12_R1.event.CraftEventFactory.handleEntityDamageEvent(CraftEventFactory.java:482) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at org.bukkit.craftbukkit.v1_12_R1.event.CraftEventFactory.handleLivingEntityDamageEvent(CraftEventFactory.java:611) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.EntityLiving.damageEntity0(EntityLiving.java:1339) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.EntityLiving.damageEntity(EntityLiving.java:863) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.EntityMonster.damageEntity(EntityMonster.java:44) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.EntityMonster.B(EntityMonster.java:68) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.EntityCaveSpider.B(SourceFile:38) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.PathfinderGoalMeleeAttack.a(SourceFile:127) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.PathfinderGoalMeleeAttack.e(SourceFile:119) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.PathfinderGoalSelector.a(SourceFile:129) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.EntityInsentient.doTick(EntityInsentient.java:664) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.EntityLiving.n(EntityLiving.java:2090) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.EntityInsentient.n(EntityInsentient.java:507) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.EntityMonster.n(EntityMonster.java:24) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.EntityLiving.B_(EntityLiving.java:1939) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.EntityInsentient.B_(EntityInsentient.java:246) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.EntityMonster.B_(EntityMonster.java:28) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.EntitySpider.B_(EntitySpider.java:45) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.World.entityJoinedWorld(World.java:1640) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.World.h(World.java:1610) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.World.tickEntities(World.java:1436) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.WorldServer.tickEntities(WorldServer.java:665) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:814) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:405) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:678) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:576) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_191]
    Caused by: java.lang.NoClassDefFoundError: objMobwars/poisonedWeb
        at mobwars.Events.onHurt(Events.java:170) ~[?:?]
        at sun.reflect.GeneratedMethodAccessor350.invoke(Unknown Source) ~[?:?]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_191]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_191]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) ~[spigot.jar:git-Spigot-596221b-9a1fc1e]
        ... 32 more
    Лечится банальным /reload-ом. Но эта проблема встречается постоянно во многих других моих плагинах...
    Строка 170 ссылается на объект (класс) poisonedWeb, который, похоже, не найден.
    Код:
    if(new Random().nextDouble()<=dm.ultra.get("chance")/100.00)main.webs.add(new poisonedWeb(dm.ultra.get("dur"),dm.ultra.get("dam"), dm.owner, en.getLocation()));
    А вот и тот самый класс (это не единственный забагованный класс)
    Код:
    package objMobwars;
    
    import org.bukkit.Location;
    import org.bukkit.Material;
    
    public class poisonedWeb {
        public int time;
        public int dps;
        public String owner;
        public Location loc;
        public poisonedWeb(int Time, int DPS, String Owner, Location Loc){
            time=Time;
            dps=DPS;
            owner=Owner;
            loc = Loc;
            loc.getBlock().setType(Material.WEB);
        }
    }
    
    Смена ядра не помогает. (ну или все 4 ядра с разных сайтов, включая официальный, забагованные.)
     
  2. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Джаву обнови, убедись, что этот класс тоже компилируется и складывается в джарник
     
  3. Автор темы
    pro100koder

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

    Баллы:
    76
    Как убедиться, что он складывается в джарник? На всякий случай повторю главное: стоит прописать /reload, как всё магическим образом чинится. Только вот релодаю я часто, а после ~1 из 3-х релодов опять эта ошибка. А, или вроде как эта ошибка появляется, когда я впервые запускаю серв, до первого релода... Ну это не точно.
     
  4. alexandrage

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

    Баллы:
    173
    Зависимый плагин не загрузился. От чего и ошибка.
     
  5. InterWall

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

    Баллы:
    173
    Плохая практика, завязывай с этим.
     
  6. Автор темы
    pro100koder

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

    Баллы:
    76
    Зависимый плагин? Не, нету такого. Ток сам этот плагин, а котором классы распределены по пакетам (утилиты, объекты, основные классы.)
     
  7. Автор темы
    pro100koder

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

    Баллы:
    76
    Всмысле? Ну, потестил-залил обнову-релоднул. Ничего плохого не вижу, ибо это на тестовых сервах происходит, где только тестеры и я.
     
  8. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Не юзай reload, перезагружай сервер полностью.
     
  9. Автор темы
    pro100koder

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

    Баллы:
    76
    Во-первых, эта ошибка может появиться при первом запуске, при чём шанс при запуске больше, чем после reload-а. Во-вторых, вот сделал я апдейтик, где игроки получают на 50$ больше в начале игры, и всёёёё, перезапускать полностью серв, ждать, пока всё снова загрузится, говорить тестерам, что можно заходить... Или просто прописать /reload, созданный для таких ситуаций специально. Что же выбрать....
     
  10. gummi_anka

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

    Баллы:
    66
    Имя в Minecraft:
    gummi_anka
    второе конечно же, не слушай его.
     
  11. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Если у тебя все на месте, после обычной перезагрузки не возникнет NCDFE.
    Если плагин не является ни чей зависимостью, то перезагружай его отдельно, а не все через релоад.
     
  12. Автор темы
    pro100koder

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

    Баллы:
    76
    Я понял, в чём проблема. Но как решить - я не могу понять. Классы в плагине загружаются хаотично, либо непонятным мне образом. Все "забагованные" классы имеют в себе другой класс из этого же плагина (к примеру, в одном плагине муз. гуи имеет в себе инструменты, а инструменты - это отдельный объект из этого же плагина). Короче я вижу один выход: выставить конкретную очередь загрузки классов. Так как плагинов много, и все огроменные, классов дофига. И я понятия не имею как указывать даже эту последовательность... Я могу допускать сейчас ошибку X Y, возможно есть другое решение.
     
  13. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Плагинов много? Ты же говорил, что речь про один.
    Ещё раз повторю вопрос: классы mobwars.Events и objMobwars.poisonedWeb находятся в одном плагине?
     
  14. Автор темы
    pro100koder

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

    Баллы:
    76
    ДА. Плагинов много это в смысле что проектов в целом у меня полно, и если везде ставить эту очередь, я задолбаюсь их всех вписывать везде. Но эти плагины между собой никак не связаны.
     
  15. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Ты и не сможешь никак указать порядок. Его определяет JVM. jar-файл — просто архив с классами, и PluginClassLoader в ядре не загружает классы отдельно, а добавляет .jar целиком в classpath.
    В других плагинах на сервере нету класса с таким же названием (objMobwars.poisonedWeb)?
    Нет ли в этих двух классах циклического импорта (импорт mobwars.Events в objMobwars.poisonedWeb И наоборот)?
     
  16. Автор темы
    pro100koder

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

    Баллы:
    76
    Я не знаю... Именно в этом классе (который poisonedWeb) ничего странного нет, я не уверен даже, что проблема в этом уже... Я выкладывал код из этого класса, там ~20 строк. Эта проблема встречается часто в моём другом самописном плагине... Там около 90% шанс того, что хоть один из классов так забагует... Вот несколько примеров: класс GUI музыки:
    Код:
    import java.util.ArrayList;
    import java.util.HashMap;
    
    public class musicGUI {
        public HashMap<Integer, instrument> instruments = new HashMap<>();
        public boolean playing=false;
        public ArrayList<instrument> avaliable = new ArrayList<>();
        public musicGUI(){
            
        }
    }
    
    в нём используется объект (который кстати не импортируется :confused:) instrument, который находится в том же пакете, что и сам GUI музыки... Ещё пример, класс неких посетителей: там 50/50 что забагует... Ток вот в чём прикол: в main классе, где вызывается метод из класса гостей, разумеется, есть импорт тех самых гостей... А в гостях импорта main нету. Зато есть импорт 2-х других классов из того же плагина, в которых уже есть импорт класса main... Блин говорю как шизик, верующий в иллюминатов) Ну может быть в этом (д/т)ело... Хотя тогда почему в musicGUI эта ошибка... У меня даже теорий нет, от чего она :/
     
  17. Автор темы
    pro100koder

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

    Баллы:
    76
    Попробовал подобавлять необязательных импортов. Сейчас тестить буду.
     
  18. Shevchik

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

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    1. Возможно у тебя в разных пдагинах есть классы с одинаковым названием, тогда может быть совершенно рандомное поведение при перезагрузке.
    2. Возможно ты заменяешь .jar файлы плагинов вместо того чтобы класть файлы в папку update, тогда если класс был не загружен, то класслоадер не сможет загрузить после того как файл был заменён.
     
  19. Автор темы
    pro100koder

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

    Баллы:
    76
    Названия разные, ради этого я и делаю пакеты utilsMobwars, utilsShops там... И я нашёл причину проблемы: я не делал импорты... В эклипсе все импорты делают автоматом, кроме тех, что в том же пакете, что и сам класс. С тех пор как я начал везде эти импорты тыкать, ошибок этих я не видел)
     

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