Иконка ресурса

Вырезалка 2

will0376

Токсичная личность
2,058
55
572
@JustAGod Зря ты не завез из коробки исключения из валидации... Например: у меня есть пакет, который использует методы которые вырезаются на клиенте, но не на сервере... При этом я сам метод хандлера вырезать не могу, т.к. он переопределяющий =0
 
7,099
324
1,509
Используй пакетную систему CCL, там нет такой проблемы)
 
1,111
47
420
@JustAGod Зря ты не завез из коробки исключения из валидации... Например: у меня есть пакет, который использует методы которые вырезаются на клиенте, но не на сервере... При этом я сам метод хандлера вырезать не могу, т.к. он переопределяющий =0
заведи метод handleClient и handleServer. Вызывай их из главного через Invoke.
Ну или просто запихни все в Invoke.
 

will0376

Токсичная личность
2,058
55
572

will0376

Токсичная личность
2,058
55
572
Абсолютно всегда так делаю.
я... наверное совсем охренел, но можно пример? я не до конца понимаю в чем соль... типа сделать отдельный класс, который будет реализовывать IMessageHandler<[CLASS], IMessage>?
 
929
30
66
Java:
public static class Handler implements IMessageHandler<YouPacket, IMessage> {
        
        @Override
        public IMessage onMessage(YouPacket packet, MessageContext ctx) {
            if(ctx.side.isClient()) {
                act(packet);
            } else {
                act(ctx.getServerHandler().playerEntity , packet);
            }
            return null;
        }   
        
        @GradleSideOnly(GradleSide.CLIENT)
        private void act(YouPacket packet) {
        }
        
        @GradleSideOnly(GradleSide.SERVER)
        private void act(EntityPlayerMP player, YouPacket packet) {
        }
    }
 

will0376

Токсичная личность
2,058
55
572
вызывай свои подметоды.
Вот в этом и проблема, что валидатор начинает мозгу любить, мол метода нет...
Главный класс, ПреИнт:
Java:
@Mod.EventHandler
    public void preinit(FMLPreInitializationEvent event) {
        if (event.getSide().isServer()) serverPreInt(event); <- указывает сюда
    }

    @GradleSideOnly(GradleSide.SERVER)
    @SideOnly(Side.SERVER)
    private void serverPreInt(FMLPreInitializationEvent event) {
    <код>
    }
и всё так-же Cannot find method ru.will0376.ob.OB.serverPreInt(Lnet/minecraftforge/fml/common/event/FMLPreInitializationEvent;)V
 
7,099
324
1,509
В вырезалке есть экзекьюторы, можно их юзать вместо if
 
7,099
324
1,509
1,111
47
420
добавлю что в дефолтной инициализации есть Invoke.server и Invoke.client
т.е. нужно просто написать Invoke.server(() -> serverPreInt(event))
исходный код лежит тут
 
1,111
47
420
Етак обнова
1. Добавилась новая классная фича: эвристика. Она подробно описана в репо и в описании ресурса. Спасибо @implicit за починку одного отвратительного бага из-за которого я ее так долго не релизил.
2. Добавил в описание инвокаторы.
3. У меня просили изменить поведение ф-ии initializeDefault. Теперь она принимает 2 параметра (back compatibility осталась конечно). Написал об этом в описании.

И о да. Первый контрибутор в вырезалочку.
 
1,111
47
420
Также керилл исправил странный баг с отсутствующим методом котлина. Мне никто не жаловался, так что надеюсь никто не ловил, но все же.
 
Сверху