Как Это работает
Немного истории
Очень долгое время (ещё до 1.14) популярным загрузчиком модов был Forge. И для него же sp614x создал OptiFine, который помимо моментов, свзяанные с оптимизацией, добавлял систему CIT (Custom Item Textures), которая была перенесена из MCPatcher. Но когда игроки начали переходить на Fabric, они не могли пользоваться OptiFine из-за технических причин, и тем самым игроки на Fabric на некоторое время потеряли доступ к CIT. Но в 2021-22 пользователь shsupercm выпустил для Fabric модификацию CIT Resewn, который полностью возврощал эту возможность.
Далее, после выхода 1.21.2 Mojang начали активно менять свой код рендера Minecraft, а в 1.21.4 они поменяли и систему ренедера предметов, а в 1.21.5 ванилла смогла полностью (почти) заменить основную фишку CIT из-за которой ей пользовались - предметы по переименованиям. К этому времени shsupercm уже сдался и перестал поддерживать CIT Resewn.
И тогда некоторые люди заметели проблему: в ванильной систему наборов рессурсов если вы будете стараться добавить 2 (или более) набора с одной и той же моделью. Проблема оказалась в том, что Mojang прописала загрузку моделей так, что загружается только самая верхняя модель, при этом друге она не вообще не загружает в память игры.
RPF же решает эту проблему: он переписывает код загрузки так, чтобы все предметы из всех ресурспаков загружались в игру, и адаптирует выборку нужной модели под это.
Как работает выборка
Для начала, разберём некоторые термины:
- Фолбэк (fallback) модель - это дочерняя модель предмета, которая записана в полях
fallbackвminecraft:selectи вminecraft:range_dispatch. Зачастую, если это НЕ некоторые искючительные слуаи, о которых рассказано здесь - Стратегия выборки - это модуль RPF, который по своим правилам решает, какую модель предмета отправить на рендер
А теперь к сути. Система стандартной стратегии (да-да, она не одна! об этом в разделе Система делегирования) по очереди проходится по моделям и их дочерям, и если модель НЕ дала команду на делегрование ренедера модели - то мы её рендерим!
