[Гайд][Легко][1.6+] Модификация чужого кода при запуске (трансфомеры)

У меня ни в каком виде не принимает @ReturnValue и @LocalVariable . Eclipse утверждает, что нету таких аннотаций...
P.S посмотрев исходный код с этим вроде разобрался, но вот как использовать VariableHelper пока не понял, у меня метод оттуда попросту ничего не выводит.
 
Последнее редактирование:
476
9
39
У меня ни в каком виде не принимает @ReturnValue и @LocalVariable . Eclipse утверждает, что нету таких аннотаций...
Скачай ты уже Intellij Idea Community Edition и всё. Все проблемы решатся.
Eclipse вечно через бобра работает, т.е медленно.
 
У меня проблема: на собранном майне выдает такую ошибку: Can not find target method of hook AsmHook. Файл methods.bin сгенерирован, на всякий случай я перегенирировал его еще раз, но все-равно не помогает. Происходит это только с одним хуком, все остальные работают нормально.
 
808
3
124
Если не работает на одном конкретном методе, и ты собирал сам methods.bin, то скорее всего этого метода почему-то просто нет в собранном майне, не? Можешь попробовать дампануть классы и посмотреть, пропиши в строку запуска собранного майна:
-Dlegacy.debugClassLoading=true -Dlegacy.debugClassLoadingSave=true
 
Огромное спасибо, именно это мне и помогло так как найдя этот метод в обфусцированном виде я добавил его в methods.csv, перегенирировал и все заработало)
 
1,195
31
183
Люди, хочу чтобы в методе Entity.class

Java:
 @SideOnly(Side.CLIENT)
    public boolean isInRangeToRenderDist(double p_70112_1_)
    {
        double d1 = this.boundingBox.getAverageEdgeLength();
        d1 *= 64.0D * this.renderDistanceWeight;
        return p_70112_1_ < d1 * d1;
    }
Вместе 64.0D было 128.0D
Как эт сделать? Ничего не понимаю)
Нужно увеличить дистанцию рендера сущностей
 
1,195
31
183
Хукнулся в ентити.класс так:
Java:
@Hook(returnCondition = ReturnCondition.ALWAYS)
    public static boolean isInRangeToRenderDist(Entity entity, double p_70112_1_) {
        return p_70112_1_ > 0D;
        
    }
Но ограничение на дистанцию рендера все еще есть, что за фигня?
 

CumingSoon

Местный стендапер
1,634
12
269
А ты просто поменяй renderDistanceWeight
УпД: У тебя разве тот condition? Always - всегда же возвращает, не зависимо от твоей проверки. Могу ошибаться
 
1,195
31
183
А ты просто поменяй renderDistanceWeight
Менял везде где можно, и в эвентах, везде
Как бы знаешь, на моем сервере в эклипсе это работает, в одиночке вообще нет. И на сервере на котором будут играть игроки, эта фича не работает. Я хз что делать
 
5,018
47
783
Очень не хватает в либе функционала удаления метода. Просто, чтобы, целиком. Без замены и.т.д. Будет такое?
 
Эм, а чем тебе не нравится вставка хука с ретурном в начало метода? тот же самый эффект, тело изначального метода не вызовится. Такой способ даже лучше, NoSuchMethodError не вылетит.
 
5,018
47
783
Я не нашел, какой параметр позволяет в начало метода ретурн ставить... инжектОнЭкзист, на выходе то есть только, нашел.
 
А без него хук будет вызываться в начале метода.
 
5,018
47
783
Здравствуйте, у меня проблема... в общем, в класс BlockStone хук вроде как вставляется, но там он не вызывается и не работает.

Java:
    @Hook(createMethod = true, returnCondition = ReturnCondition.ALWAYS)
    public static void updateTick(BlockStone st, World world, BlockPos pos, IBlockState state, Random rand)
    {
        System.out.println("hook");
        if(!world.isRemote) {
            if(world.getBlockState(pos) == Blocks.STONE.getDefaultState().withProperty(BlockStone.VARIANT, BlockStone.EnumType.GRANITE)) {
                System.out.println("hook2");
                if(world.isAirBlock(pos.down()) && rand.nextInt(10) == 4) {
                    world.setBlockState(pos, RegBlocks.cobblestones.getDefaultState().withProperty(BlockCobblestones.VARIANT, BlockCobblestones.EnumType.COBBLE_GRANITE));
                    System.out.println("hook3");
                }
            }
        }
    }
Я перепробовал все что знал. Ни в какую. Даже первый принтлн не срабатывает. Интересный прикол в том, что абсолютно идентичный хук в BlockDirt работает великолепно.
 
5,018
47
783
Эммм, а как? setTickRandomly ж не статик. Как мне его вызвать?
Java:
    @Hook(returnCondition = ReturnCondition.ALWAYS,injectOnExit = true)
    public static void init(BlockStone bl) {
        setTickRandomly(true);
    }
 
Сверху