Базові предмети можуть зайти лише так далеко - зрештою вам знадобиться предмет, який взаємодіє зі світом, коли його використовують.
Є кілька ключових класів, які ви повинні зрозуміти, перш ніж дивитися на події усталених предметів.
InteractionResult
InteractionResult повідомляє грі статус події, незалежно від того, чи була вона пройдена/проігнорована, невдала чи успішна.
Успішна взаємодія також може бути використана для трансформації стосу в руці.
java
ItemStack heldStack = user.getStackInHand(hand);
heldStack.decrement(1);
InteractionResult.SUCCESS.heldItemTransformedTo().success(heldStack);1
2
3
2
3
Перевизначені події
На щастя, у класі Item є багато методів, які можна замінити, щоб додати до ваших предметів додаткові функції.
INFO
Чудовий приклад використання цих подій можна знайти на сторінці відтворення звукових подій, яка використовує подію 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
6
2
3
4
5
6
Подія використання є, мабуть, найкориснішою з усіх — ви можете використовувати цю подію, щоб створити нашу блискавку, вам слід створити її за 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
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Як зазвичай, вам слід зареєструвати свою річ, додати модель і текстуру.
Як бачите, блискавка повинна створитися в 10 блоках від вас — гравцем.

