Manifest-Version: 1.0
FMLCorePlugin: gloomyfolken.hooklib.asm.HookLibPlugin
FMLCorePluginContainsFMLMod: true
Created-By: 1.7.0 (Oracle Corporation)
У тебя 1.7.10 ?Не мог бы показать свою META-INF ?Или дать свой проект с прикрепленным META-INF ,а то чувствую тут я не разберусь.krok написал(а):Надо ещё плагин указать твой.У меня крашалось и я сунул в ASmHook в injectData.
@Override
public void injectData(Map<String, Object> data) {
obf = ((Boolean) data.get("runtimeDeobfuscationEnabled"));
AsmHooks.hook();
}
AsmHook.newBuilder()
.setTargetClassName("net.minecraft.client.Minecraft") // модифицируем класс Minecraft
.setTargetMethodName("resize") // модифицируем метод resize
.setTargetMethodObfuscatedName("a") // указываем обфусцированное название метода
.appendTargetMethodParameters(Type.INT_TYPE, Type.INT_TYPE) // указываем параметры метода
.setHooksClassName("gloomyfolken.hooklib.example.ClientHooks") // хук-метод находится в этом классе
.setHookMethodName("onResize") // хук-метод называется onResize
.appendHookMethodParameter(Type.INT_TYPE, 1) // добавляем параметр хук-метода, передаем в него par1
.appendHookMethodParameter(Type.INT_TYPE, 2) // добавляем параметр хук-метода, передаем в него par2
.buildAndRegister(); // создаем и регистрируем хук
Мне рассказать тебе, что я думаю о людях, которые до сих пор используют локальные кодировки? В IDEA выставляется через file -> settings -> editor -> file encodings.krok написал(а):Ах да,глуми ,русские коменты не работают
Как ты это потом компилировать собираешься? Костыли удобнее всего вставлять именно хуками, проверено на богатом личном опытеXuPuPG написал(а):Как я понимаю можно добавлять только вызов метода в конце или начале класса?А как насчет полей? :ermm:
public class TurtlePlaceCommand implements ITurtleCommand {
private final InteractDirection m_direction;
private final Object[] m_extraArguments;
public TurtlePlaceCommand(InteractDirection direction, Object[] arguments) {
this.m_direction = direction;
this.m_extraArguments = arguments;
}
public TurtleCommandResult execute(ITurtleAccess turtle) {
ItemStack stack = turtle.getInventory().getStackInSlot(turtle.getSelectedSlot());
if(stack == null) {
return TurtleCommandResult.failure("No items to place");
} else {
int direction = this.m_direction.toWorldDir(turtle);
ItemStack remainder = deploy(stack, turtle, direction, this.m_extraArguments);
if(remainder != stack) {
turtle.getInventory().setInventorySlotContents(turtle.getSelectedSlot(), remainder);
turtle.getInventory().onInventoryChanged();
turtle.playAnimation(TurtleAnimation.Wait);
return TurtleCommandResult.success();
} else {
return stack.getItem() instanceof ItemBlock?TurtleCommandResult.failure("Cannot place block here"):TurtleCommandResult.failure("Cannot place item here");
}
}
}
int direction = this.m_direction.toWorldDir(turtle);
AsmHook.newBuilder()
.setTargetClass("cc.package.name.TurtlePlaceCommand")
.setTargetMethod("execute")
.addTargetMethodParameters("cc.package.name.ITurtleAccess")
.setTargetMethodReturnType("cc.package.name.TurtleCommandResult")
.setHookClass("your.package.name.Hooks")
.setHookMethod("turtleHook")
.addHookMethodParameter("cc.package.name.ITurtleAccess", 1)
.setReturnCondition(ReturnCondition.ON_NOT_NULL)
.setReturnValue(ReturnValue.HOOK_RETURN_VALUE)
.buildAndRegister();
public static TurtleCommandResult turtleHook(ITurtleAccess turtle){
if (что-нибудь) {
return TurtleCommandResult.failure("Чужой приват, или что там за сообщение");
} else {
return null; // если вернуть null, то продолжается выполнение целевого метода
}
}
AsmHook.newBuilder()
.setTargetClass("net.minecraft.item.ItemSword")
.setTargetMethod("<init>") // модифицируем конструктор, обфусцированное имя не нужно
.addTargetMethodParameters(Type.INT_TYPE, TypeHelper.getType("net/minecraft/item/Item"))
.setHookClass("gloomyfolken.hooklib.example.CommonHooks")
.setHookMethod("twiceDamage")
// нулевой параметр - это this
.addHookMethodParameter("net.minecraft.item.ItemSword", 0)
.setInjectorFactory(AsmHook.ON_EXIT_FACTORY) // вставляем хук в конец метода
.buildAndRegister();
public static void twiceDamage(ItemSword sword){
sword.setMaxStackSize(40);
}