ты написал код который если я не ошибаюсь вызывается по ПКМ на сущности, и он будет давать атрибуты цели
код должен выглядеть так
@Override
public InteractionResultHolder<ItemStack> use(Level world, Player entity, InteractionHand hand) {
InteractionResultHolder<ItemStack> ar = super.use(world, entity, hand);
ItemStack itemstack = ar.getObject();
if (entity instanceof Player _player && !_player.level.isClientSide && hand=InteractionHand.MAIN_HAND) {
_player.getAbilities().flying = (true);
_player.onUpdateAbilities();
}
return ar;
}
проверка на InteractionHand.MAIN_HAND и !_player.level.isClientSide обязательна, иначе код будет выполняться 4 раза
1раз для клиента и правой руки
2раз для клиента и левой руки
3 и 4 раз тоже самое для сервера
проверка итем стака не нужна в данном случае
если ты хочешь сделать тоже самое когда игрок держит предмет в руке, сделай это в тиковом событии игрока
в тиковом событии предмета код будет подобен этому
@Override
public void inventoryTick(ItemStack itemstack, Level world, Entity entity, int slot, boolean selected) {
super.inventoryTick(itemstack, world, entity, slot, selected);
if (selected){
//код
}
}
я могу допустить ошибки в коде, под рукой сейчас нет IDE для проверки