перестал работать ElegantNetworking на 1.7.10

Версия Minecraft
1.7.10
API
Forge
Всем привет. Внезапно вчера стал у меня вываливаться с ошибкой проект, в котором я пытаюсь допилить мод, с которого был раньше сделан форк для сборки, которая мне интересна. (Сборка на 1.7.10 ИИС, конкретно мод, который допиливаю mapwriter).
Решил добавить в этот мод функционал, хранение данных(маркеры на карте) на сервере, чтобы при игре на сервере, чтобы если играет насколько игроков играло на одном сервере, могли видеть маркеры других игроков (опционально).
Так вот, т.к. этот мод (mapwriter) чисто клиентский, то для работы с сервером, необходимо, чтобы данные игрока отправлялись на сервер. Я только начинаю изучать java, поэтому чтобы не разбираться с ванильной отправкой пакетов, решил прикрутить ElegantNetworking, о котором прочитал здесь. Добавление прошло успешно, недели 2 уже потихоньку писал код, чтобы отправлялись пакеты с клиента на сервер и наоборот, посл. неск. дней, когда было время писал код, чтобы данный сохранялись в NBT на сервере. И вот вчера вечером неожиданно при запуске через idea майн при входе в мир начал вываливаться с ошибкой(java.lang.NullPointerException: Ticking memory connection). Сначала даже не понял почему начались краши, т.к. не трогал ту часть кода, но когда включил отладчик, то выявил проблему в отправке пакета с сервера на клиент. При дебаге кидает исключение, текст видно в отладчике idea

"Packet is not registered: mapwriter.server.networkPackets.ServerToClient.ServerCheckerPacket. Need to add @ElegantPacket annotation to packet class or check annotation processor availability"

Хотя аннотация в классе подключена, процессор аннотация в idea включен.

Скачал с гитхаба пример elegantnetworking Elegantnetworking Examples, запустил gradle setupdecompworkspace idea, при отправке пакета, такая же ошибка что пакет незарегистрирован.

Причем попробовал запустить через gradlew runClient, клиент запускается, но при попытке отправить пакет происходит краш с такое же ошибкой, что пакет незарегистрирован.




Вход на сервер:
@SubscribeEvent
    public void onEntityJoinWorld(EntityJoinWorldEvent event) {
        Entity entity = event.entity;
        UUID playerUUID=entity.getUniqueID();



        if (!entity.worldObj.isRemote && entity instanceof EntityPlayerMP) {
            //set flag, what MapWriter mod install and works on Server
            new ServerCheckerPacket(true).sendToPlayer((EntityPlayerMP)event.entity);
        }
    

    }

Пакет:
package mapwriter.server.networkPackets.ServerToClient;

import hohserg.elegant.networking.api.ElegantPacket;
import hohserg.elegant.networking.api.ServerToClientPacket;
import mapwriter.Mw;
import net.minecraft.client.Minecraft;

@ElegantPacket
public class ServerCheckerPacket implements ServerToClientPacket {
    final boolean mwServer;


    public ServerCheckerPacket(boolean mwServerFlag) {
        this.mwServer=mwServerFlag;

    }

    @Override
    public void onReceive(Minecraft mc) {
        //sets the flag that the server is installed and running server`s MapWriter
        //(for save markers on server storage)
        if(mc.theWorld.isRemote){
            Mw.instance.isMwOnServerWorks=true;
        }

    }
}
 
Краш-лог
Description: Ticking memory connection

java.lang.NullPointerException: Ticking memory connection
at cpw.mods.fml.common.network.internal.FMLProxyPacket.processPacket(FMLProxyPacket.java:110)
at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241)
at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:182)
at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:726)
at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614)
at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485)
at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752)


A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------

-- Head --
Stacktrace:
at cpw.mods.fml.common.network.internal.FMLProxyPacket.processPacket(FMLProxyPacket.java:110)
at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241)

-- Ticking connection --
Details:
Connection: net.minecraft.network.NetworkManager@4b6d0bfb
Stacktrace:
at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:182)
at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:726)
at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614)
at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485)
at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752
Краш-лог:
Description: Ticking memory connection

java.lang.NullPointerException: Ticking memory connection
	at cpw.mods.fml.common.network.internal.FMLProxyPacket.processPacket(FMLProxyPacket.java:110)
	at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241)
	at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:182)
	at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:726)
	at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614)
	at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118)
	at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485)
	at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752)


A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------

-- Head --
Stacktrace:
	at cpw.mods.fml.common.network.internal.FMLProxyPacket.processPacket(FMLProxyPacket.java:110)
	at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241)

-- Ticking connection --
Details:
	Connection: net.minecraft.network.NetworkManager@4b6d0bfb
Stacktrace:
	at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:182)
	at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:726)
	at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614)
	at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118)
	at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485)
	at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752
Решение
Спасибо за ответ, думаю, что твоя библиотека здесь не виновата, После того как сменил имя @modid и перестало вылетать на входе в мир, сначала обрадовался, но ненадолго, т.к. при отправке другого пакета (с клиента на сервер) краш с такое-же ошибкой, что пакет незарегистрирован. Раньше в логах при старте майна, помню, что видел строки о регистрации всех пакетов EN, которые есть в проекте, с вот в посл. логах была только регистрация первого пакета. Сделал следующее: очистил папку caches градла (users\имяпользователя\.gradle\cashes), заново запустил из папки проекта gradlew setupDecompWorkSpace idea, дождался окончания, открыл проект в idea, включил заново процессор аннотаций и запустил проект через debug. Перед этим сменил @modid на...
7,099
324
1,510
Привет.
Опубликуй build.gradle.
Выполни gradle build и покажи содержимое
/META-INF/services/
/META-INF/services/hohserg.elegant.networking.impl.IPacketProvider
из собранного мода
 
build.gralde:
buildscript {
    repositories {
        mavenCentral()
        maven {
            name = "forge"
            url = "https://files.minecraftforge.net/maven"
        }
        maven {
            name = "sonatype"
            url = "https://oss.sonatype.org/content/repositories/snapshots/"
        }
    }
    dependencies {
        classpath('com.anatawa12.forge:ForgeGradle:1.2-1.0.+') {
            changing = true
        }
    }
}

apply plugin: 'forge'

repositories {
    mavenLocal()
}

dependencies {
    implementation group: 'commons-codec', name: 'commons-codec', version: '1.5'
    implementation "io.gitlab.hohserg.elegant.networking:elegant-networking-1.7.10:3.14"
    compileOnly "io.gitlab.hohserg.elegant.networking:annotation-processor:3.14"
    annotationProcessor "io.gitlab.hohserg.elegant.networking:annotation-processor:3.14"
    compile fileTree(dir: 'libs', include: '*.jar')
}

group = "vectron"
version = "2.2.Exp_ServerEdition" //mod version
archivesBaseName = "MapWriter"


minecraft {
    version = "1.7.10-10.13.4.1614-1.7.10"
    runDir = "eclipse"
    replace '@MOD_VERSION@', "2.2.Exp_ServerEdition" //mod version
}

processResources {
    // this will ensure that this task is redone when the versions change.
    inputs.property "version", project.version
    inputs.property "mcversion", project.minecraft.version

    // replace stuff in mcmod.info, nothing else
    from(sourceSets.main.resources.srcDirs) {
        include 'mcmod.info'

        // replace version and mcversion
        expand 'version': project.version, 'mcversion': project.minecraft.version
    }

    // copy everything else, thats not the mcmod.info
    from(sourceSets.main.resources.srcDirs) {
        exclude 'mcmod.info'
    }
}

jar {}

task sourceJar(type: Jar) {
    from sourceSets.main.allSource
    classifier = 'src'
}

task devJar(type: Jar) {
    from sourceSets.main.output
    classifier = 'dev'
}

artifacts {
    archives sourceJar
    archives devJar
}
mapwriter.server.networkPackets.ClientToServer.ClientGroupsPacketProvider
mapwriter.server.networkPackets.ClientToServer.ClientLoadDataPacketProvider
mapwriter.server.networkPackets.ClientToServer.ClientMarkersPacketProvider
mapwriter.server.networkPackets.ServerToClient.ServerCheckerPacketProvider
mapwriter.server.networkPackets.ServerToClient.ServerMarkerPacketsProvider

в meta-inf/services 2 файла:
hohserg.elegant.networking.impl.ISerializerBase
hohserg.elegant.networking.impl.IPacketProvider




Забыл написать, что подключен CodeChickenCore и idea
Странно. Попробовал запустить проект через gradlew runClient, запустился, вылета при входе в мир нет, пакет отработал (добавил вывод в консоль)

Скачал annotation-processor-3.14.jar с мавена, положил в папку с проектом, указал путь в idea
image.png
Не помогло
 
Последнее редактирование:
7,099
324
1,510
Очень хорошо, все сделано правильно.
Проект опенсорсный? Можешь куда-нить на гитхаб опубликовать? Чтобы я мог поковырять локально.
И правильно ли я понял, что проблема состоит в запуске через таски idea, которые сгенерированы через gradle genIntellijRuns?
 
Последнее редактирование:
Да, проект открытый, ссыль на гитхаб: mapwriter За качество кода прошу сильно не пинать, т.к. изначально мод был написан не мной, я его уже взял на доработку из-за того, что хотел изучить JAVA(программирование как хобби).
И правильно ли я понял, что проблема состоит в запуске через таски idea, который сгенерированы через gradle genIntellijRuns?
Я начинающий, поэтому таких страшных слов еще не знаю :). Код через idea пишу, запуск/отладка через menu run/debug minecraft client(minecraft server)
и вот еще, как писал ранее, что через gradlew runClient запускается все работает, а вот если сделать gradlew build и положить собранный мод в папку mods и запустить minecraft, то будет вылет
 
7,099
324
1,510
Это связано с тем, что EN использует modid в качестве дефолтного имени канала и кеширует его для фичи инткрементальной компиляции idea.
Так что в случае возникновения такого бага нужно просто пересобрать проект: удалить папки ./classes и запустить сборку.
Кстати, по той же причине gradle runClient работает - он пересобирает проект каждый раз

Хороший вопрос: какое состояние кэша нужно выставить, чтобы сломать таким образом? Попробую воспроизвести у себя.
Спасибо за репорт!
 
Спасибо за ответ, думаю, что твоя библиотека здесь не виновата, После того как сменил имя @modid и перестало вылетать на входе в мир, сначала обрадовался, но ненадолго, т.к. при отправке другого пакета (с клиента на сервер) краш с такое-же ошибкой, что пакет незарегистрирован. Раньше в логах при старте майна, помню, что видел строки о регистрации всех пакетов EN, которые есть в проекте, с вот в посл. логах была только регистрация первого пакета. Сделал следующее: очистил папку caches градла (users\имяпользователя\.gradle\cashes), заново запустил из папки проекта gradlew setupDecompWorkSpace idea, дождался окончания, открыл проект в idea, включил заново процессор аннотаций и запустил проект через debug. Перед этим сменил @modid на старое имя. После запуска майна, пролистал лог, убедился, что все 5 пакетов зарегистрированы, попробовал войти в мир и проверил все пакеты, Все стало работать отлично.
Поэтому краши скорее всего стали возникать из-за проблем кешем.
И огромное спасибо за библиотеку EN, с ней очень комфортно работать (y)
 
Сверху