Gli oggetti basilari non possono arrivare lontano - prima o poi ti servirà un oggetto che interagisce con il mondo quando lo si usa.
Ci sono alcune classi chiave che devi comprendere prima di dare un'occhiata agli eventi degli oggetti vanilla.
InteractionResult
Un InteractionResult informa il gioco sullo stato dell'evento, sia che sia saltato/ignorato, fallito o riuscito.
Un'interazione riuscita può anche essere usata per trasformare lo stack in mano.
java
ItemStack heldStack = user.getStackInHand(hand);
heldStack.decrement(1);
InteractionResult.SUCCESS.heldItemTransformedTo().success(heldStack);1
2
3
2
3
Event con Override
Fortunatamente, la classe Item ha molti metodi di cui si può fare override per aggiungere funzionalità ai tuoi oggetti.
INFO
Un ottimo esempio di questi eventi in uso si trova nella pagina Riprodurre Suoni, che usa l'evento useOn per riprodurre un suono quando il giocatore clicca un blocco con il tasto destro.
| Metodo | Informazioni |
|---|---|
hurtEnemy | Eseguito dopo che il giocatore colpisce un'entità. |
mineBlock | Eseguito dopo che il giocatore rompe un blocco. |
inventoryTick | Eseguito ad ogni tick mentre l'oggetto è nell'inventario. |
onCraftedPostProcess | Eseguito quando l'oggetto viene craftato. |
useOn | Eseguito quando il giocatore clicca un blocco con il tasto destro, mentre ha l'oggetto. |
use | Eseguito quando il giocatore clicca con il tasto destro mentre ha l'oggetto. |
L'Evento use()
Immaginiamo che tu voglia fare in modo che l'oggetto crei un lampo davanti al giocatore - dovrai creare una classe personalizzata.
java
public class LightningStick extends Item {
public LightningStick(Properties properties) {
super(properties);
}
}1
2
3
4
5
6
2
3
4
5
6
L'evento use è probabilmente il più utile tra tutti - puoi usare questo evento per generare il lampo, dovresti generarlo 10 blocchi davanti al giocatore, nella direzione verso cui è diretto.
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
Come sempre, dovresti registrare il tuo oggetto, aggiungere un modello e una texture.
Come puoi notare, il lampo dovrebbe essere generato 10 blocchi davanti a te, giocatore.

