Borealis ✧ RP Minecraft

Borealis ✧ RP Minecraft 

Ролевой сервер в майнкрафте с иштарскими голубями

14subscribers

42posts

goals1
$34.58 of $1 412 raised
Покушац

Взаимодействие с предметами: стул

Порой, чтобы взаимодействовать с предметами, их нужно делать в формате энтити. У этого есть несколько причин, но на примере стула самая очевидная — возможность сесть на него.
Существует пару вариантов реализации подобной логики: можно сделать стул в виде блока, а вместе с ним спавнить невидимую сущность, либо делать сущность с логикой под блок. И мы рассмотрим оба!
С чего начать?
Моделька в Блокбенче создается в формате Modded Entity, либо, если вам принципиально использовать GeckoLib, то Animated Model - Entity. 
В качестве примера я использую нашу модельку табуретки, сделанную в формате Геколиба. 
Вариант 1: Энтити, который пытается быть блоком.
У нас есть сущность — табуретка. Окно её настройки, соответственно, как у обычной сущности. Но есть несколько параметров, которые нам совершенно не нужны: яйцо призыва, звуки, поведение, здоровье и прочее. На первое время советую не отключать яйцо призыва, чтобы можно было быстро протестировать сущность прямо в игре.
Во вкладке «Поведение» делаем следующее:
- Устанавливаем тип Creature;
- Снижаем здоровье до 1;
- Ставим галочку «Можно оседлать»;
- Включаем всю невосприимчивость, кроме атаки игрока;
Во вкладке «ИИ и цели»:
Снимаем галочку с «Включить ИИ»
Во вкладке «Генерация»:
Полностью отключаем генерацию этой сущности
Также, в первой вкладке визуала, для анимации ранения и смерти, включаем звук:
block.wood.break (либо другой материал, подходящий вашей модели)
Так мы получим сущность, которая будет уничтожаться с одного удара. Но ведь обычные блоки так себя не ведут, верно? Именно здесь мы и знакомимся с такой вещью, как вкладка «Триггеры».
Триггеры — это процедуры, которые побуждают сущность, блок или другой объект к определённому поведению. Что делает обычный блок, когда его ломают? Он просто исчезает, выпуская частицы — вот и всё.
Именно такое поведение мы и хотим воссоздать для нашей сущности.
Здесь может подойти как "При ранении сущности", так и "При гибели сущности". Нажимаем плюсик — это создаст нам процедуру. Процедуру, в случае чего, можно применить к любому триггеру.
Нам нужно реализовать два действия: удаление сущности при ударе и появление частиц. Удаление настраивается во вкладке Процедуры сущностей → Действия, а частицы — во вкладке Процедуры мира → Действия.
x, y, z — это координаты центра сущности, их не трогаем. А вот vx, vy, vz — это параметры разлёта: vx и vz отвечают за разброс по горизонтали, vy — за движение вверх.
У блоков частицы генерируются из их текстуры, но у нашей табуретки нет ванильной текстуры, значит, и стандартных частиц тоже нет. Поэтому будем их имитировать вручную.
Идем в наш проект и создаем Частицу. В качестве текстуры мы будем рисовать квадратик в самом MCreator. 
Текстуры из наших ресурсов мы так же можем открывать внутри программы, чтобы работать с ними, но в данном случае мне от них нужна лишь палитра. Накидала квадратики, не очень красивые, но чтобы было! Это и будет нашими частицами для вызова в блоке триггера. Сохраняем текстуру как частицу и возвращаемся в наше окошко.
  В данный момент нас здесь больше ничего не интересует, но для справки: тип отрисовки отвечает за то, как отображается текстура.
OPAQUE — это непрозрачные материалы (дерево или камень);
TRANSLUCENT — полупрозрачные (стекло, лёд, листья);
LIT — это режим подсветки: модель всегда выглядит ярко, независимо от освещения (лампы, неон).  
Теперь мы можем выбрать нашего захудальца и использовать его модель в качестве частицы! Но стоит запустить игру — и табуретка действительно исчезает, а вот частица улетает куда-то в небо. Это значит, что пора настроить поведение частиц так, как нам нужно.
Открываем окно настройки частицы и задаём параметры:
Гравитация: 0.4 — частицы начнут падать вниз, как блоки;
Максимальный возраст: 10–15 — через это количество тиков частица исчезнет;
Столкновение: отключаем, если не хотим, чтобы частицы отскакивали от блоков.
В окне нашей процедуры ищем Управление потоком — Повторить X раз, выполнить >...
Для позиций мы находим Математика, а в ней "Случайное дробное число от X до Y". Сделаем -0,05 до 0,05 для vx и vz, а для vy - от 0.05 до 0.15.
ptpl
TaburetBlockLogic.ptpl589 Byte
С настройками можно экспериментировать как угодно — менять размеры частиц, их количество, направление разлёта. В целом, так можно довольно точно сымитировать поведение обычного блока. Если сложно найти нужные действия в списке процедур, можно просто импортировать мой файл: в самой процедуре в правом верхнем углу жмём «Импорт процедуры» и выбираем файл — логика автоматически появится в рабочей области.
Учитывай, что я работаю в MCreator 2024.3
Но есть ещё пара вещей, которые нужно подправить. Скорее всего, если вы попытаетесь сесть на сущность, то окажетесь где-то в воздухе.
Переходим в визуал и ищем хитбокс нашей модели — нам нужно отредактировать высоту, подходящую под наш стул. В моем случае идеальным будет 0,6.
И вот — мы сидим на табуретке! Но есть ещё пара моментов, которые явно могут смущать. Во-первых, табуретка вращается, а во-вторых — у неё до сих пор есть яйцо призыва. Начнём с яйца, ведь у предметов такого быть не должно.
Нас интересует предмет. Здесь все достаточно легко — загружаем иконку нашего предмета, либо создаем её непосредственно в MCreator. 
Сейчас нам от этого предмета ничего сверхсложного не требуется. Разве что для удобства можно зайти во вкладку Свойства и добавить предмет в нужную категорию креативного инвентаря. После этого пропускаем всё остальное и идём сразу к заветному триггеру — нас интересует «При щелчке ПКМ по блоку».
Нам нужно, чтобы наш предмет создавал нашу сущность. Для этого находим Процедуры мира — Действия — Призвать сущность в X, Y, Z, где мы выставим позицию перед собой, используя Математику.
ptpl
TaburetSpawn.ptpl478 Byte
Теперь, когда табуретка будет появляться через созданный нами предмет, яйцо призыва можно смело отключать — больше оно нам не нужно.
Остаётся ещё одна проблема — табуретка отказывается стоять ровно. В принципе, это особенность энтити с отключенным ИИ, поэтому самым простым решением будет приноровиться, как со стойками для брони.
В целом, это первый способ создать энтити-стул, где мы стараемся сымитировать поведение блока с помощью сущности.
Но есть и второй способ!
Вариант 2: Блок, который пытается быть энтити.
Для этого второго варианта нам понадобится другой формат исходной модели — Java Block/Item или GeckoLib Animated Model - Block. Лучше определиться с вариантом реализации заранее, потому что UV-развёртка от Entity-модели не конвертируется в Block/Item, и вам придётся переделывать текстуру вручную. Однако, если вы всё делаете через GeckoLib — вас эта проблема не затронет вовсе.
Создаём модель и экспортируем её в проект, но уже как блок.
В случае Java Block/Item экспортируем через ресурсы, нажимая "Экспорт 3D модели JSON". Выбираем наш файл, импортируем его текстуру и идём создавать блок.
После того как мы добавили модель, в поле выбора модели блока появится возможность указать нашу — так и делаем. Выбираем текстуру и смотрим, что ещё можно настроить на этой странице:
Основа блока — визуальное отображение базовой геометрии. Сейчас это нам не нужно, но пригодится, если будем делать лестницы, плиты и другие варианты одного и того же блока;
Текстура предмета — то, как блок выглядит в инвентаре;
Текстура частиц — изображение для разлетающихся частиц при разрушении блока;
Режим поворота — задаёт, можно ли вращать блок. Самый распространённый вариант — Y axis rotation (S/W/N/E), если хотим, чтобы блок поворачивался по сторонам света;
Тип прозрачностиSOLID для обычных моделей, CUTOUT, если есть прозрачные участки (например, ножки или отверстия).
В рамках-границах подбираем хитбокс под нашу модель, чтобы взаимодействие с блоком было точным и удобным.
В свойствах настраиваем звуки, вкладку креатива, название и другие параметры.
Теперь можно было бы перейти сразу к триггерам, но не спешим — перед этим нам нужно сделать так, чтобы блок вызывал то, на что можно сесть, а именно — энтити.
Наша модель должна быть невидимой, и вариантов реализовать это у нас несколько: можно экспортировать пустую модель, а можно выбрать любую из стандартных и просто загрузить в неё пустую текстуру. Я воспользуюсь вторым способом.
Далее, как и в первом варианте, отключаем все звуки и поведение, делаем сущность неуязвимой ко всему, и выставляем здоровье на 1.
Возвращаемся к нашему блоку и любимым Триггерам. В нашем случае нам нужно "При добавлении блока" — щелкаем и создаем процедуру. 
У сущностей есть одна неприятная особенность — они могут умирать от застревания в блоках. То же случится и с нашей сущностью, если мы заспавним её прямо внутри табуретки. Один из вариантов решения — спавнить сущность немного выше хитбокса блока.
Предположим, хитбокс моей табуретки по высоте — 9. Хитбокс самой сущности — 0.6, поэтому в процедуре спавна я укажу y + 0.8. Это обеспечит нужный зазор и позволит спокойно сесть прямо на табуретку, без риска, что сущность задохнётся в блоке.
Вуаля — я снова сижу! Осталось лишь немного доработать детали.
Во-первых, убираем тень от сущности — для этого в параметрах нашей энтити ставим размер тени в 0, чтобы не отбрасывала.
Во-вторых, нам нужно избавляться от сущности, если сам стул будет разрушен. Для этого снова идём во вкладку триггеры и выбираем «При разрушении блока игроком».
Наша задача — убрать энтити в том же самом месте, где стоит табуретка. Для этого делаем простенькую логику: в Процедурах мира находим блок «В кубе с центром...», выбираем радиус 1 и наш тип сущности, чтобы обнаружить её в пределах блока. Затем в Процедурах существ выбираем «Удалить "Данная сущность"», убираем плашку «Данную сущность» и вместо неё ставим из Процедур мира — «Ближайшая сущность типа...». Таким образом, при удалении стула мы автоматически уберём из той же точки и сущность, на которую можно было садиться.
ptpl
TaburetEntityKill.ptpl506 Byte
На заметку: дроп в случае энтити вы можете настроить в поведении, выбрав предмет, через который призываете сущность. В случае блока дроп настраивается в нём же.
Принципиальной разницы между подходами нет — работайте с тем, что удобнее. Сущности одинаково нагружают игру при большом количестве, будь то ваш стул, стенды, лодки или рамки.
Subscription levels2

Маленькая поддержка

$1.42 per month
То, что поддерживает разработчиков проекта пахать днём и ночью! Потому что теперь они могут хотя бы покушац.
- Доступ к дополнительным спойлерам.
- Доступ к девлогу с процессом разработки.

Поддержка побольше

$2.83 per month
То, что поддерживает разработчиков проекта пахать днём и ночью! Потому что теперь они могут хотя бы покушац.
- Доступ к дополнительным спойлерам.
- Доступ к девлогу с процессом разработки, советами и туториалами.
- Доступ к дополнительным туториалам, советам, а так же файлам для импорта в MCreator.
Go up