изменение 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);
 
1,159
38
544
Попробуй заюзать EnumHelper для изменения енумов материалов
 
3,005
192
592
В <clinit>()V
Проверяешь опкод BIPUSH, после проверяешь что он добавляет 59 / 131 / ... и заменяешь на другой.
 
3,005
192
592
А разве рефлексией нельзя?
Пробовал в static {...} и в FMLConstructionEvent - там уже ванильные предметы с ToolMaterial'ом зареганы.
Если челику нужно изменять ваниль - то рефлексия не варик.

sout'ил так: Item.ToolMaterial.STONE.getMaxUses() + "<>" + Items.STONE_SWORD.getMaxDamage()
Получал 100<>131.
 
1,159
38
544
5,018
47
783
Да сделай свой материал просто да и все, а потом с помощью хуклибы подменяй во всех местах Material.WOOD на свой кастомный
 
3,005
192
592
7,099
324
1,509
Зачем копаться с ASM, когда есть хуклиба?

можешь пжл расписать полностью 1 пример
Конечно распишу)
Java:
@Hook(at = @At(point = InjectionPoint.RETURN), targetMethod = "<init>")
public static void toolMaterial(Item.ToolMaterial toolMaterial, String name, int ordinal,
                                int harvestLevel, int maxUses, float efficiency, float damageVsEntity, int enchantability) {
    System.out.println("toolMaterial " + name + " " + harvestLevel + " " + maxUses + " " + efficiency + " " + damageVsEntity + " " + enchantability);
}
Этот хук вставляется в конец конструктора ToolMaterial и печатает в консольку материалы. Второй и третий параметры существуют потому что у конструктора енума они на самом деле есть
Код:
toolMaterial WOOD 0 59 2.0 0.0 15
toolMaterial STONE 1 131 4.0 1.0 5
toolMaterial IRON 2 250 6.0 2.0 14
toolMaterial DIAMOND 3 1561 8.0 3.0 10
toolMaterial GOLD 0 32 12.0 0.0 22
Чтобы теперь устанавливать свои значения нужно при помощи АТ расприватить поля ToolMaterial и добавить в хук че-то вроде
Java:
toolMaterial.maxUses = 1000;
. Чекать, какой это материал, можно по параметру name.
 
7,099
324
1,509
Это не готовый код, чуваку еще надо будет прочитать тутор про хуклибу, про АТ и дописать для своей задачи. То что я скинул - небольшой кусочек кода для поощрению юза хуклибы
 
Сверху