- 7,102
- 324
- 1,510
Всем привет!
Это форк всем известной хуклибы. Содержит мои авторские улучшения
Использование такое же([Гайд][Легко][1.6+] Модификация чужого кода при запуске (трансфомеры))
Изменения и дополнения:
Исходный код: hohserg1/HookLib
Пример использования якорей:
В тайле воронки есть баг интерграции с некоторыми инвентарями из модов:
Раньше через хуки это можно было пофиксить заменив полностью метод и вставив в середину проверку !=null, либо продублировать первую половину кода до aint и юзать ReturnCondition.ON_TRUE, чтобы выходить из метода в начале, если aint==null
С якорями можно вставить проверку сразу в середину, избежав копипасты кода
Еще пример:
В общем, штука полезная и удобная.
@GloomyFolken, примешь pull request?)
Это форк всем известной хуклибы. Содержит мои авторские улучшения
Использование такое же([Гайд][Легко][1.6+] Модификация чужого кода при запуске (трансфомеры))
Изменения и дополнения:
- Добавлены якоря, позволяющие вставлять хуки в середину метода без костылей, вроде номера строки
- Вставка возвратных хуков в начало конструктора(return до инициализации final-полей) вызывает предупреждения в логе
Исходный код: hohserg1/HookLib
Пример использования якорей:
В тайле воронки есть баг интерграции с некоторыми инвентарями из модов:
Java:
private boolean isInventoryFull(IInventory inventoryIn, EnumFacing side)
{
if (inventoryIn instanceof ISidedInventory)
{
ISidedInventory isidedinventory = (ISidedInventory)inventoryIn;
int[] aint = isidedinventory.getSlotsForFace(side);//may be null
for (int k : aint)
{
ItemStack itemstack1 = isidedinventory.getStackInSlot(k);
if (itemstack1.isEmpty() || itemstack1.getCount() != itemstack1.getMaxStackSize())
{
return false;
}
}
}
С якорями можно вставить проверку сразу в середину, избежав копипасты кода
Java:
Hook(at = @At(point = InjectionPoint.METHOD_CALL, target = "getSlotsForFace"), returnCondition = ReturnCondition.ON_TRUE, booleanReturnConstant = true)
public static boolean isInventoryFull(TileEntityHopper tile, IInventory inventoryIn, EnumFacing side)
{
return ((ISidedInventory)inventoryIn).getSlotsForFace(side)==null;
}
Scala:
//В рендере слотов теперь будет показан индекс слота(для разработки контейнеров)
@Hook(at = new At(point = InjectionPoint.RETURN))
def drawSlot (gui:GuiContainer, slotIn: Slot):Unit = {
val i = slotIn.xPos
val j = slotIn.yPos
Minecraft.getMinecraft.fontRenderer.drawString(slotIn.getSlotIndex.toString,i,j,0xff00ff)
}
@GloomyFolken, примешь pull request?)
Последнее редактирование: