Mit einfachen Items ist es nicht getan - irgendwann braucht man ein Item, das mit der Welt interagiert, wenn es benutzt wird.
Es gibt einige Schlüsselklassen, die du verstehen musst, bevor du einen Blick auf die Vanilla-Item-Events wirfst.
InteractionResult
Ein InteractionResult teilt dem Spiel den Status des Events mit, ob es bestanden/ignoriert, fehlgeschlagen oder erfolgreich war.
Eine erfolgreiche Interaktion kann auch dazu verwendet werden, den Stack in der Hand zu transformieren.
java
ItemStack heldStack = user.getStackInHand(hand);
heldStack.decrement(1);
InteractionResult.SUCCESS.heldItemTransformedTo().success(heldStack);1
2
3
2
3
Überschreibbare Events
Glücklicherweise verfügt die Klasse Item über viele Methoden, die überschrieben werden können, um zusätzliche Funktionen zu deinen Items hinzuzufügen.
INFO
Ein hervorragendes Beispiel für die Verwendung dieser Events findet sich auf der Seite SoundEvents abspielen, die das Ereignis useOn verwendet, um einen Sound abzuspielen, wenn der Spieler mit der rechten Maustaste auf einen Block klickt.
| Methode | Information |
|---|---|
hurtEnemy | Ausgeführt, wenn ein Spieler eine Entität schlägt. |
mineBlock | Ausgeführt, wenn ein Spieler einen Block abbaut. |
inventoryTick | Jeden Tick ausgeführt, solange das Item im Inventar ist. |
onCraftedPostProcess | Ausgeführt, wenn das Item hergestellt wurde. |
useOn | Ausgeführt, wenn der Spieler auf einen Block mit einem Item rechtsklickt. |
use | Ausgeführt, wenn ein Spieler ein Item rechtsklickt. |
Das use() Event
Angenommen, du möchtest ein Item erstellen, das einen Blitz vor dem Spieler herbeiruft - dann musst du eine benutzerdefinierte Klasse erstellen.
java
public class LightningStick extends Item {
public LightningStick(Properties properties) {
super(properties);
}
}1
2
3
4
5
6
2
3
4
5
6
Das use-Event ist wahrscheinlich das nützlichste von allen - du kannst dieses Event benutzen, um unseren Blitz zu erschaffen, du solltest ihn 10 Blöcke vor dem Spieler spawnen, in dessen Richtung er schaut.
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
Wie üblich solltest du deine Items registrieren, ein Modell und eine Textur hinzufügen.
Wie du sehen kannst, sollte der Blitz 10 Blöcke vor dir - dem Spieler - erscheinen.

