Пользовательские интерактивные предметы 26.1.2
Вы научитесь создавать предметы, которые используют ванильные события.
WARNING
Эта страница написана для версии 26.1.2. Документация для более старых версий может быть неполной.
Базовые предметы могут зайти так далеко, что вы можете добавить предмет, который имеет интерактивность с миром при использовании.
Есть несколько ключевых классов которые вы должны понять, прежде чем будете рассматривать события с ванильными предметами.
Класс InteractionResult
InteractionResult сообщает игре о статусе события: было ли оно пройдено/пропущено, завершилось ли оно неудачей или успехом.
Успешное взаимодействие (InteractionResult.SUCCESS) также можно использовать для изменения использованного предмета.
java
ItemStack heldStack = user.getStackInHand(hand);
heldStack.decrement(1);
InteractionResult.SUCCESS.heldItemTransformedTo().success(heldStack);1
2
3
2
3
Переопределяемые события
К счастью, класс предмета имеет множество методов, которые можно переопределить, чтобы добавить дополнительную функциональность вашим предметам.
INFO
Отличный пример есть в статье Воспроизведение SoundEvents. Там метод useOn переопределяется, чтобы проигрывать звук при клике ПКМ по блоку.
| Метод | Информация |
|---|---|
hurtEnemy | Вызывается когда игрок, ударяет сущность. |
mineBlock | Вызывается когда игрок, ломает блок. |
inventoryTick | Вызывается каждый тик когда предмет находится в инвентаре. |
onCraftedPostProcess | Вызывается когда предмет, создаётся. |
useOn | Вызывается когда игрок кликает правой кнопкой мыши предметом на блок. |
use | Вызывается когда игрок кликает правой кнопкой мыши предметом. |
Событие use()
Допустим, вы хотите создать предмет, который вызывает молнию перед игроком - вам нужно будет создать собственный класс.
java
public class LightningStick extends Item {
public LightningStick(Properties properties) {
super(properties);
}
}1
2
3
4
5
2
3
4
5
Событие use, вероятно, самое полезное из всех, вы можете использовать это событие, чтобы призвать молнию, вы должны создать её перед игроками в 10 блоков от направления.
java
@Override
public InteractionResult use(Level level, Player user, InteractionHand hand) {
// Ensure we don't spawn the lightning only on the client.
// This is to prevent desync.
if (level.isClientSide()) {
return InteractionResult.PASS;
}
BlockPos frontOfPlayer = user.blockPosition().relative(user.getDirection(), 10);
// Spawn the lightning bolt.
LightningBolt lightningBolt = new LightningBolt(EntityType.LIGHTNING_BOLT, level);
lightningBolt.setPos(frontOfPlayer.getCenter());
level.addFreshEntity(lightningBolt);
return InteractionResult.SUCCESS;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Как обычно, вам необходимо зарегистрировать свой предмет, добавьте модель и текстуру.
Как вы можете видеть, молния должна появиться в 10 блоках перед вами - игроком.

