Ладно, шутки шутками, Так то ПЫЛЬ, то есть ПЫЛ
есос. Сосущий пыль. Но тебе ведь не пыль надо было, а Предмето-сос или Блоко-сос.
Всё сводиться к тому что ты проверяешь в RandomTick предметы что лежат рядом с тобой (Item - предмет, ItemBlock - предметы которые блоки или просто блоки). Item класс общий для всех предметов, поэтому проще взять именно его.
Чтобы проверить что вокруг, тебе надо найти все Entity (как ни странно). Потому что когда предмет выброшен это EntityItem, это его новое состояние. Когда в руке это ItemStack (внутри которого уже он как Item или ItemBlock).
Обращаемся к миру и сравниваем все EntityItem по расстоянию (или радиусу). Так как мы будем работать с векторами, то не забудь прочесть эту статью.
Линейная алгебра для разработчиков игр
Я 10 лет работал без векторов, считая что раз могу это, то я очень крут. Но изучив их, я очень долго смеялся над собой, ведь вместо того чтобы сесть и прочитать статью, получается, я лишь вставлял себе палки в колёса. Понимание векторов и работа с векторами существенно упрощает понимание и количество кода.
Чтобы получить расстояние между предметами надо вычесть одну позицию из другой и получить вектор. Длинна вектора и будет расстоянием между точками. Всё что останется это сравнить это число с нашим (на сколько далеком мы должно обрабатывать предметы).
Как тебе и сказали выше, стоит посмотреть на воронку. Что я сейчас и сделаю.
Каждый раз блоки для меня находятся в совершенно не предсказуемых местах, а анг. у меня чисто технический, поэтому для начала надо узнать хотя бы как это звучит на анг.
Hopper, ок. Вау, победа
Нас конечно интересует HopperBlockEntity, скорее всего это как раз TileEntity (из старых версий, но чуть другой).
Отсюда видим две вещи
1) блок на самом деле обрабатывает все блоки рядом
UnSided - То есть безсторонний.
Ну и вот вторая финальная проверка на то можем ли мы засосать на основе Direction
Как то всё сложно на самом деле, но если разобраться, то наверное было бы круто.
Щас гляну учебник.