Follow along with the video below to see how to install our site as a web app on your home screen.
Примечание: This feature may not be available in some browsers.
Открою страшный секрет: конструктор на самом деле - обычный метод, который называется <init> и возвращает void. Как в них вставлять хуки - был пример тут.Maxik001 написал(а):хм, у меня вопрос - как вставлять хуки в конструкторы? Он требует превращения конструктора в void
GloomyFolken написал(а):Открою страшный секрет: конструктор на самом деле - обычный метод, который называется <init> и возвращает void. Как в них вставлять хуки - был пример тут.Maxik001 написал(а):хм, у меня вопрос - как вставлять хуки в конструкторы? Он требует превращения конструктора в void
/**
* В зависимости от этого значения после вызова хук-метода может быть вызван return.
*/
public enum ReturnCondition {
/**
* return не вызывается никогда.
*/
NEVER(false),
/**
* return вызывается всегда.
*/
ALWAYS(false),
/**
* return вызывается, если хук-метод вернул true.
* Нельзя применить, если хук-метод не возвращает тип boolean.
*/
ON_TRUE(true),
/**
* return вызывается, если хук-метод вернул null.
* Нельзя применить, если хук-метод возвращает void или примитив.
*/
ON_NULL(true),
/**
* return вызывается, если хук-метод вернул не null.
* Нельзя применить, если хук-метод возвращает void или примитив.
*/
ON_NOT_NULL(true);
public final boolean requiresCondition;
ReturnCondition(boolean requiresCondition) {
this.requiresCondition = requiresCondition;
}
}
Результат зависит также от места вставкиMaxik001 написал(а):ALWAYS - очевидно, заменяет все содержимое метода на содержимое хук-метода.
"А в идеале - сгенерируйте methods.bin для нужной вам версии MCP самостоятельно. Для этого в сорцах лежит скриптик DictionaryGenerator. Без этого могут возникнуть внезапные ошибки уровня "can not find target method of hook" из-за того, что я генерировал для другой версии MCP."
Dahaka написал(а):Просто запусти с этого класса. И притяни нужные методы. Где-то в user/.gradle валяются, не помню уже.
@Hook
public static void addEnchantmentBooksToList(CreativeTabs ct, List list, EnumEnchantmentType... p_92116_2_)
{
return;
}
@Hook(createMethod = true, returnCondition = ALWAYS)
public static int idDropped(BlockDirt blockDirt, int meta, Random rng, int fortune) {
return 2;
}
Maxik001 написал(а):Случайно заметил. Версия 1.11.2 или 1.12 другие не пробовал. Код
Не работает. То есть новый метод не создается, я так полагаю. Аналогично не не работает нигде. Устарело или я рукожоп?Код:@Hook(createMethod = true, returnCondition = ALWAYS) public static int idDropped(BlockDirt blockDirt, int meta, Random rng, int fortune) { return 2; }
@Hook(createMethod = true, returnCondition = ReturnCondition.ALWAYS)
// @Nullable
public AxisAlignedBB getCollisionBoundingBox(BlockLeaves bl,IBlockState blockState, IBlockAccess worldIn, BlockPos pos) {
System.out.print("COOl");
return NULL_AABB;
}