Разделить клиентсий и серверный моды

Версия Minecraft
1.12.2
API
Forge
183
8
16
Допустим есть мод, добавляющий блок. Чтобы разделить его на клиентскую и серверную части, мне нужно создать два мода с одним и тем же блоком? А как тогда его регистрировать? Подскажите, пожалуйста
 
126
6
33
Как минимум регистрировать блок под тем же регистрационным именем, чтобы при приходе пакета сторона могла понять, какой блок от неё хотят. Проще говоря в конструкторе блока на обоих сторонах выставить setRegistryName("reg_name") одинаковым.
 
235
3
21
Есть 1 крайне простой и колхозный вариант, который не требует ведения двух проектов для 1 мода

Делаешь в главном классе вот такую переменную
Java:
public static final boolean COMPILE_SERVER_PART = false;

после чего везде где у тебя идет !world.isRemote() добаляешь && MainClass.COMPILE_SERVER_PART
как пример, только серверный ивент:
public class PropsUpdateEvent
{
    @SubscribeEvent
    public void onLivingUpdateEvent(LivingUpdateEvent e)
    {
        if(!e.entityLiving.worldObj.isRemote && ZombieApocalypseMod.COMPILE_SERVER_PART)
        {
            //...
        }
    }
}

если скажем хочешь срезать реализацию метода, то в его начало вставляешь
Java:
if(MainClass.COMPILE_SERVER_PART) {
    return; //return false, null или что-то другое если метод не void
}

если COMPILE_SERVER_PART будет false, то при компиляции в байткод java выкинет весь блок с условием и его попросту не будет на клиенте
потом ставишь ее на true и компилируешь версию для сервера

после этих нехитрых действий можно еще накрыть мод через proguard + stringer, тогда вообще огонь будет
 
  • Like
Реакции: 1ime

jopi

Попрошайка
1,421
30
260
Не весь код который !world.isRemote - серверный, по сути точнее он то весь серверный, но не весь серверный код обычно помечается таким флагом, в тех же серверных событиях EventHandler'а часто может не использоваться !world.isRemote и где-то еще, просто поддайтесь логике и подумайте логически на какой стороне код проигрывается
 

tox1cozZ

aka Agravaine
8,455
598
2,892
в тех же серверных событиях EventHandler'а часто может не использоваться !world.isRemote
В вырезалке есть штука, которую можно настроить на свою переменную и она будет на нее реагировать так же.
 
Сверху