Клиентский и Серверный мод в одной среде

Версия Minecraft
1.6.4
355
2
17
Доброго времени суток! Столкнулся с проблемой разделения мода на Клиентский и Серверные части в одной среде.
Такая вот структура:

Java:
client/Main (modid: modClient)
server/Main (modid: modServer)
common/Items (По сути регистрация итемов, используется обеими частями)

Т.к. имена модов различаются, то регистрация предметов тоже, и они в конечно итоге не состыковываются и нельзя зайти на сервер.
А если сделать имена модов одинаковые, то в одной среде запустить будет проблематично.

Как быть?
 
Решение
Ну, я как-бы билдю jar'ник, создаю дубликат jar'ника. Один с пост-суффиксом "клиент", другой с "сервер". Что в "сервер" я удаляю папку client, а что в "клиент" удаляю папку "server".
Т.е. по сути, в клиент части не будет ServerProxy, что выдаст соответствующую ошибку.
Если ты делал всё правильно, то не должно.
Java:
    @SidedProxy(modId = MODID,
            serverSide = "mod.server.ProxyServer",// - это "сервер", унаследован от "общий"
            clientSide = "mod.client.ProxyClient")// - это "клиент", унаследован от "общий"
    public static ProxyCommon proxy;// - это общий
"Общий" может быть так-же интерфейсом (если не планируется что-либо заполнять в нём) и...
3,005
192
592
У тебя должны быть одинаковые modId в любом случае, что бы у игрока были те предметы (и блоки, мобы etc), которые добавляются модом.

Самый не очень умный способ: запустить 2 IDE.
 
355
2
17
Запускать две не совсем годный вариант, ибо среда где находятся эти два мода одна (mcp + forge)

Просто GameRegistry.registerItem(net.minecraft.item.Item item, String name, String modId)
Вроде как третий параметр modid, но чтобы там не указывал - все равно регистрирует под тем именем, откуда была вызвана регистрация.
Да и метод как пишет в предупреждении устаревший. Других вариантов никаких нет?
 
355
2
17
Но в конечном счете должно быть 2 файла с таким вот содержанием:

Java:
ModClient.jar
./common/$.class
./Main.class
./ClientProxy.class
    
ModServer.jar
./common/$.class
./Main.class
./ServerProxy.class

Т.е. по сути, в клиент части не будет ServerProxy, что выдаст соответствующую ошибку.
Просто хотелось бы увидеть как нужно разделить структуру, чтобы был общий common, но остальная часть раздельна и независима друг от друга. Дабы в конечном счете разделить их по разным файлам.
 

timaxa007

Модератор
5,831
409
672
Ну, я как-бы билдю jar'ник, создаю дубликат jar'ника. Один с пост-суффиксом "клиент", другой с "сервер". Что в "сервер" я удаляю папку client, а что в "клиент" удаляю папку "server".
Т.е. по сути, в клиент части не будет ServerProxy, что выдаст соответствующую ошибку.
Если ты делал всё правильно, то не должно.
Java:
    @SidedProxy(modId = MODID,
            serverSide = "mod.server.ProxyServer",// - это "сервер", унаследован от "общий"
            clientSide = "mod.client.ProxyClient")// - это "клиент", унаследован от "общий"
    public static ProxyCommon proxy;// - это общий
"Общий" может быть так-же интерфейсом (если не планируется что-либо заполнять в нём) и абстрактным классом (по желанию).
 
355
2
17
@timaxa007, вот только как быть с перехватчиком пакетов?)
Java:
@NetworkMod(
        [email protected](channels = {"modC"}, packetHandler = CPacketHandler.class),
        [email protected](channels = {"modS"}, packetHandler = SPacketHandler.class)
)

Как-то отдельно регистрировать в прокси их?

UPD. Разобрался, вручную в прокси:
NetworkRegistry.instance().registerChannel(new CPacketHandler(), "channel");
 
Последнее редактирование:
Сверху