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

1,239
2
24
А что там не так?Строка передает инт путь к методу setMaxStackSize правильная.
 
808
3
124
Да тут не в слешах дело. ЕМНИП, со слешами даже будет работать. Проблема в том, что у ItemSword такой конструктор: 
public ItemSword(int par1, EnumToolMaterial par2EnumToolMaterial)
Откуда ты там взял net.minecraft.item.Item? Там же net.minecraft.item.EnumToolMaterial. Кстати, с TypeHelper'ом не обязательно возиться, можно написать так:
.addTargetMethodParameters(Type.INT_TYPE)
.addTargetMethodParameters("net.minecraft.item.EnumToolMaterial")
 
1,239
2
24
Это я тупил.Думал что туда нужно передавать параметры моего хука.
Заменил,все равно та же ошибка.Мне кажется ему <init> не нравится
 
1,239
2
24
Вот:
Код:
        AsmHook.newBuilder()
                .setTargetClass("net.minecraft.item.ItemSword")
                .setTargetMethod("<init>") // модифицируем конструктор, обфусцированное имя не нужно
                .addTargetMethodParameters(Type.INT_TYPE, TypeHelper.getType("net.minecraft.item.EnumToolMaterial"))
                .setHookClass("gloomyfolken.hooklib.example.CommonHooks")
                .setHookMethod("twiceDamage")
                // нулевой параметр - это this
                .addHookMethodParameter("net.minecraft.item.ItemSword", 0)
                .setInjectorFactory(AsmHook.ON_EXIT_FACTORY) // вставляем хук в конец метода
                .buildAndRegister();

Ошибка :

Код:
Can not found target method of hook AsmHook: net.minecraft.item.ItemSword#<init> -> gloomyfolken.hooklib.example.CommonHooks#twiceDamage
 
808
3
124
Если бы путь к хук-методу был другим, оно бы крашнуло позже) К сожалению, на момент вставки хука нет легкой возможности проверить валидность пути. ЕМНИП, крашнет оно уже во время выполнения.
 
808
3
124
И как же ты выводишь, "когда будет вставлен хук"?)
[merge_posts_bbcode]Добавлено: 30.06.2015 22:11:31[/merge_posts_bbcode]

Если ты сделал вывод в лог в twiceDamage, то все крайне логично - конструктор меча вызывается далеко не один раз (хотя без модов и не 12)
 
14
0
Пачаны вот я хочу пофиксить баг Tinker Construct'a, где мне взять для него srg???
 
14
0
Код:
@Override
    public boolean dealDamage(float damage, ToolCore ammo, NBTTagCompound tags, Entity entityHit)
    {
        boolean dealtDamage = false;

        //Minecraft.getMinecraft().thePlayer.sendChatMessage("Damage/Weight: " + damage + "  -  " + tags.getFloat("Mass"));

        // we take the weight, and shift the damage done towards armor piercing, the more weight the arrow/bolt has!
        float shift = (tags.getFloat("Mass") - 0.7f)*armorPenetrationModifier();

        if(shift < 0)
            shift = 0;
        if(shift > damage)
            shift = damage;

        damage -= shift;

        // deal regular damage
        if(damage > 0)
            dealtDamage = super.dealDamage(damage, ammo, tags, entityHit);

        // deal armor piercing damage
        if(shift > 0) {
            DamageSource damagesource;
            if (this.shootingEntity == null)
                damagesource = new PiercingArrowDamage("arrow", this, this);
            else
                damagesource = new PiercingArrowDamage("arrow", this, this.shootingEntity);

            //Minecraft.getMinecraft().thePlayer.sendChatMessage("Piercing Damage: " + shift);

            // piercing damage does not affect wether the entity was hit (return value), since it should go through always
            entityHit.attackEntityFrom(damagesource, shift);
        }

        return dealtDamage;
    }
Как сделать так, чтобы внутри ПВП офф (WorldGuard) нельзя было делать подобную штуку???
Отправить ивент фордж, и если там cancel то кансел?..
 
1,239
2
24
хурон,зачем тебе что то хукать туда?Я тебе исходники дал,их правь как хочешь и потом собери у себя
 
808
3
124
Обновлены библиотека и гайд. Нововведения:
1) Вставка хуков с помощью аннотаций.
2) Отделение связанного с майнкрафтом кода от остального. Теперь можно удалить пакет gloomyfolken.hooklib.minecraft и использовать библиотеку в не связанных с майнкрафтом проблемах.
3) Вставка хука по номеру строки
4) Вставка хука, после вызова которого вызывается другой метод и в целевом методе возвращается уже значение, которое вернёт второй метод.
5) Больше не нужно указывать обфусцированное название метода, я всё-таки притащил в проект словарь названий методов.
6) Передача хуку значения локальной переменной.
7) Приоритет хуков
8) Класс HookLoader, который по сути - простейшая реализация IFMLLoadingPlugin.
 
Сверху