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

Версия Minecraft
1.7.10
235
3
21
день (ну почти) добрый
помогите пжл изменить значение Item$EnumToolMaterial через ASM, не знаю как это сделать

то что есть:
WOOD(0, 59, 2.0F, 0.0F, 15),
STONE(1, 131, 4.0F, 1.0F, 5),
IRON(2, 250, 6.0F, 2.0F, 14),
EMERALD(3, 1561, 8.0F, 3.0F, 10),
GOLD(0, 32, 12.0F, 0.0F, 22);

то что нужно:
WOOD(0, 50, 2.0F, 0, 15),
STONE(1, 90, 4.0F, 1.0F, 5),
IRON(2, 210, 6.0F, 2.0F, 14),
EMERALD(3, 1100, 8.0F, 3.0F, 10),
GOLD(0, 32, 12.0F, 0.0F, 22);
 
7,099
324
1,509
Верно, можно рефлексией
 
235
3
21
в общем, повозился я еще немного и выдавил из себя хук, который вставляется в начало метода регистрации ванильных итемов, вставить хук в конструктор енума не получилось (юзал обычную либу от глуми, ругалось, что не может найти 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
А ты уверен, что после майновской обфускации, у ToolMaterial остается поле с именем maxUses?
Или этот хелпер учтет обфускацию при поиске имен?
 
7,099
324
1,509
Будут, если юзать версию из ветки 1.12. Но я советую переписать с использованием якоря, потому что в следующей обнове все будет на якорях и то что щас помечено Deprecated исчезнет
 
Сверху