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.
TypedActionResult
Per gli oggetti, il TypedActionResult che incontrerai più comunemente è per gli ItemStacks - questa classe informa il gioco riguardo a cosa sostituire (o non) nello stack di oggetti dopo che l'evento è avvenuto.
Se non è successo nulla nell'evento, dovresti usare il metodo TypedActionResult#pass(stack), dove stack è lo stack di oggetti corrente.
Puoi ottenere lo stack di oggetti corrente ottenendo il contenuto della mano del giocatore. Di solito gli eventi che richiedono un TypedActionResult passano la mano al metodo dell'evento.
java
TypedActionResult.pass(user.getStackInHand(hand))1
Se passi lo stack corrente - nulla cambierà, anche dichiarando l'evento come fallito, saltato/ignorato o riuscito.
Se volessi eliminare lo stack corrente, dovresti passarne uno vuoto. Lo stesso si può dire per la riduzione, puoi analizzare lo stack corrente e diminuirlo della quantità che vuoi:
java
ItemStack heldStack = user.getStackInHand(hand);
heldStack.decrement(1);
TypedActionResult.success(heldStack);1
2
3
2
3
ActionResult
Similmente, un ActionResult informa il gioco sullo stato dell'evento, sia che sia saltato/ignorato, fallito o riuscito.
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 useOnBlock per riprodurre un suono quando il giocatore clicca un blocco con il tasto destro.
| Metodo | Informazioni |
|---|---|
postHit | Eseguito dopo che il giocatore colpisce un'entità. |
postMine | Eseguito dopo che il giocatore rompe un blocco. |
inventoryTick | Eseguito ad ogni tick mentre l'oggetto è nell'inventario. |
onCraft | Eseguito quando l'oggetto viene craftato. |
useOnBlock | 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(Settings settings) {
super(settings);
}
}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 ActionResult use(World world, PlayerEntity user, Hand hand) {
// Ensure we don't spawn the lightning only on the client.
// This is to prevent desync.
if (world.isClient) {
return ActionResult.PASS;
}
BlockPos frontOfPlayer = user.getBlockPos().offset(user.getHorizontalFacing(), 10);
// Spawn the lightning bolt.
LightningEntity lightningBolt = new LightningEntity(EntityType.LIGHTNING_BOLT, world);
lightningBolt.setPosition(frontOfPlayer.toCenterPos());
world.spawnEntity(lightningBolt);
return ActionResult.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.

