изменение enum через ASM

Сообщения
160
Лучшие ответы
0
Реакции
7
хотя, можно через рефлексию сделать, все равно просада в скорости не будет ибо вызывается этот конструктор всего 5 раз
 
Сообщения
4,191
Лучшие ответы
109
Реакции
564
Верно, можно рефлексией
 
Сообщения
160
Лучшие ответы
0
Реакции
7
в общем, повозился я еще немного и выдавил из себя хук, который вставляется в начало метода регистрации ванильных итемов, вставить хук в конструктор енума не получилось (юзал обычную либу от глуми, ругалось, что не может найти target)
ItemHook:
public class ItemHook
{
    @Hook
    public static void registerItems(Item item)
    {
        try {
            for(Field f : Item.ToolMaterial.class.getFields())
            {
                f.setAccessible(true);
            }

            ReflectionHelper.findField(Item.ToolMaterial.class, "maxUses").setInt(Item.ToolMaterial.WOOD, 50);
            ReflectionHelper.findField(Item.ToolMaterial.class, "maxUses").setInt(Item.ToolMaterial.STONE, 90);
            ReflectionHelper.findField(Item.ToolMaterial.class, "maxUses").setInt(Item.ToolMaterial.IRON, 210);
            ReflectionHelper.findField(Item.ToolMaterial.class, "maxUses").setInt(Item.ToolMaterial.EMERALD, 1100);

        } catch (IllegalArgumentException | IllegalAccessException | SecurityException e) {
            e.printStackTrace();
        }
    }
}
именно сюда, потому что в этом методе в интрументы заталкивают ToolMaterial
спасибо всем
 
Последнее редактирование:
  • Like
Реакции: lnti
Сообщения
1,822
Лучшие ответы
48
Реакции
321
А ты уверен, что после майновской обфускации, у ToolMaterial остается поле с именем maxUses?
Или этот хелпер учтет обфускацию при поиске имен?
 
Сообщения
160
Лучшие ответы
0
Реакции
7
спасибо, сделаем тогда костыль))
 
Сообщения
4,191
Лучшие ответы
109
Реакции
564
Юзал бы мой форк, там прекрасно все пашет
 
Сообщения
160
Лучшие ответы
0
Реакции
7
а старые хуки, без изменения синтаксиса будут работать?
 
Сообщения
4,191
Лучшие ответы
109
Реакции
564
Будут, если юзать версию из ветки 1.12. Но я советую переписать с использованием якоря, потому что в следующей обнове все будет на якорях и то что щас помечено Deprecated исчезнет
 
Сообщения
160
Лучшие ответы
0
Реакции
7
мне просто совместимость то не нужна особо, у меня режим вакуумный, я целиком методы заменяю, а потом просто планирую сразу через проект forge вшить
 
Сверху