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.
GloomyFolken написал(а):Пришел к выводу, что большинству удобнее упаковывать хуклибу в свой мод, и переписал урок под это.
Dahaka написал(а):Можешь, если не сложно, расписать, как сделать через либу (под отдельным спойлером, например)? Я собрал все, но когда загружается мой мод вылетает NoClassDefFoundError: HookLoader.
Пофиксил диким костылем, хотелось бы узнать, как надо.
alex0 написал(а):Получается что Cauldron нельзя патчить? В клиенте работает, а там нет.
Ухаха)) Вот именно так я и сделал, только с маленькой буквы)))GloomyFolken написал(а):У меня проблема решена тем, что джарник с хуклибой называется "AHookLib.jar" (и грузится форджем раньше других модов только из-за названия). Вот это точно "дикий костыль"
Да не, если все внутрь закинуть, все отлично работает.GloomyFolken написал(а):и не знаю, откуда там может быть NoClassDefFoundError.
alex0 написал(а):Все упаковано было. Да и оно должно было встать после Gradle build полюбому же не?
@IFMLLoadingPlugin.MCVersion(value = "1.10.2")//без нее тоже не пашет
public class ExampleHookLoader extends HookLoader {
@Override
public void registerHooks() {
registerHookContainer("ete.asm.ItemRender");
}
}
public class ItemRender {//ни один из хуков не пашет
@Hook()
public static ActionResult<ItemStack> onItemRightClick(Item item, ItemStack itemStackIn, World worldIn, EntityPlayer playerIn, EnumHand hand) {//Для теста пробовал кидать жемчуг, кликать палкой по траве
System.out.println("test");
return new ActionResult(EnumActionResult.PASS, itemStackIn);
}
@Hook(returnCondition = ReturnCondition.ALWAYS)
public static void renderItem(ItemRenderer ir, EntityLivingBase entityIn, ItemStack heldStack, ItemCameraTransforms.TransformType transform) {//это должно было каждый тик вызывать, вроде
System.out.println("test");
}
}
Не знаю, нужно ли тебе, или нет, но я нашел такой комментарий в hooklib.asm.SafeClassWriter:Agravaine написал(а):Странно, но если неявно трогать объект класса, то будет вываливаться ClassNotFoundException.
/**
* ClassWriter с другой реализацией метода getCommonSuperClass: при его использовании не происходит загрузки классов.
* Однако, сама по себе загрузка классов редко является проблемой, потому что инициализация класса (вызов статических
* блоков) происходит не при загрузке класса. Проблемы появляются, когда хуки вставляются в зависимые друг от друга
* классы, тогда стандартная реализация отваливается с ClassCircularityError.
*/
Там вообще этих методов нет, поэтому их нужно туда запилить и переопределить. Ибо наследование. И собственно это пара предметов из другого мода, который забросили уже года эдак 3-4hohserg написал(а):Хуки дают совместимость с другими модами "из коробки" в 95%(примерно) случаев(остальные 5% - это когда целиком заменяется метод и может возникнуть несовместимость)
talosdx написал(а):Там вообще этих методов нет, поэтому их нужно туда запилить и переопределить. Ибо наследование. И собственно это пара предметов из другого мода, который забросили уже года эдак 3-4
@Hook(createMethod = true, returnCondition = ALWAYS)
public static int idDropped(BlockDirt blockDirt, int meta, Random rng, int fortune) {
return 2;
}
public int idDropped(int meta, Random rng, int fortune) {
return super.idDropped(meta, rng, fortune);
}
public int idDropped(int meta, Random rng, int fortune) {
return MyHooks.idDropped(this, meta, rng, fortune);
//return super.idDropped(meta, rng, fortune); <-- никогда не вызывается
}
@Hook(targetMethod = "<init>")
public static void blockSandConstructor(BlockSand blockSand, int id){
System.out.println("Constructing BlockSand!");
}
public BlockSand(int id) {
super(id, Material.sand);
MyHooks.blockSandConstructor(this, id); // хук в начале конструктора
this.setCreativeTab(CreativeTabs.tabBlock);
}
Конечно нужна. А я думал, что нет возможности такое провернуть.GloomyFolken написал(а):благодаря этой просьбе мне стало ясно, что я - не единственный, кому такая фича нужна.
Agravaine написал(а):Он и приватный схавает.