Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Вопрос Обход ItemComponentSanitizer в Paper 1.21.x (Survival Mode)

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
11 Апр 2025
Сообщения
2
Реакции
0
Копаю структуру пакетов в Paper 1.21.4/5. Пытаюсь реализовать передачу кастомных данных через компонент minecraft:custom_data в режиме выживания (GM 0).

Проблема:
В Paper реализована жесткая санитизация через io.papermc.paper.util.sanitizer.ItemComponentSanitizer. Когда клиент шлет пакеты ClickSlotC2SPacket или PlayerInteractBlockC2SPacket, сервер проверяет NBT/Компоненты. Если предмет (например, булыжник) не должен иметь custom_data, сервер его вырезает.

Анализ исходников показал, что санитизация в основном происходит при энкодинге (outbound), то есть когда сервер шлет инфу обратно. Но при декодинге (inbound) сервер принимает данные в память "как есть".

Вопрос:
Существует ли в Paper 1.21.x "окно доверия" или race condition в Netty Pipeline, когда данные пакета уже попали в обработку, но еще не были стерты санитизером? Может быть, есть специфические пакеты (например, carriedItem при клике в пустой слот или взаимодействие с Merchant/Lectern), где DataComponentPatch применяется к предмету в памяти сервера без немедленной валидации типа предмета?

Цель заставить сервер сохранить (или передать дальше в пайплайн) хотя бы один кастомный тег в custom_data предмета, который по дефолту NBT не имеет.


 
Назад
Сверху Снизу