@Hook
public static void onUpdate(EntityPlayer player) {
ItemStack[] itemStacks = getPrevEquipment(player);
for (int j = 0; j < 5; ++j) {
ItemStack itemstack = itemStacks[j];
ItemStack equipment = player.getEquipmentInSlot(j);
if (!ItemStack.areItemStacksEqual(equipment, itemstack)) {
itemStacks[j] = equipment == null ? null : equipment.copy();
//YOUR CODE HERE
}
}
}
Есть LivingUpdateEvent.добавил хук на onUpdate у EntityPlayer
Да и вызов евента довольно оверхедный из-за кучи лишних проверок каждый тик.
Какие у тебя там лишние проверки то? instanceof чтоли? Это уже овероптимизацияВ общем, добавил хук на onUpdate у EntityPlayer
@Hook
public static void onUpdate(EntityPlayer player) {
ItemStack[] itemStacks = getPrevEquipment(player);
for (int j = 0; j < 5; ++j) {
ItemStack itemstack = itemStacks[j];
ItemStack equipment = player.getEquipmentInSlot(j);
if (!ItemStack.areItemStacksEqual(equipment, itemstack)) {
itemStacks[j] = equipment == null ? null : equipment.copy();
//YOUR CODE HERE
}
}
}
А какую проверку? Я не придумал более оптимального решения, чем этоДля игрока же просто запилить проверку.
Вызов скомпилированной лямбды занимает столько же, сколько и прямой вызов метода так-то...P.S Зная твою любовь к "оптимизациям", один instanceof будет работать в разы быстрее чем твой цикл, дополнительная проверка ItemStack.areItemStacksEqual и лукапы/рефлексии.
EntityPlayer, открываем глазоньки :3Ещё раз повторю, что игрок переопределяет метод onUpdate и не вызывает родительский(
Ну да, тебе же стаки нужно передать в хук (предыдущий и текущий, который обновился). А они идут как локальные переменные в методе (itemstack и itemstack1).По поводу LocalVarible: я думал, что это локали внутри метода, а не поля класса
instanceof в хуке, ну. Ты же хукаешься в EntityLivingBase, а нужно выполнять код для игрока.А какую проверку? Я не придумал более оптимального решения, чем это