mirror of
https://github.com/Minestom/Minestom.git
synced 2025-02-20 14:21:29 +01:00
Added PlayerChangeHeldSlotEvent
This commit is contained in:
parent
9dfb9b657b
commit
b47efa35ca
@ -0,0 +1,49 @@
|
||||
package net.minestom.server.event.player;
|
||||
|
||||
import net.minestom.server.entity.Player;
|
||||
import net.minestom.server.event.CancellableEvent;
|
||||
import net.minestom.server.utils.MathUtils;
|
||||
import net.minestom.server.utils.validate.Check;
|
||||
|
||||
/**
|
||||
* Called when a player change his held slot (by pressing 1-9 keys)
|
||||
*/
|
||||
public class PlayerChangeHeldSlotEvent extends CancellableEvent {
|
||||
|
||||
private Player player;
|
||||
private short slot;
|
||||
|
||||
public PlayerChangeHeldSlotEvent(Player player, short slot) {
|
||||
this.player = player;
|
||||
this.slot = slot;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the player who changed his held slot
|
||||
*
|
||||
* @return the player
|
||||
*/
|
||||
public Player getPlayer() {
|
||||
return player;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the slot which the player will held
|
||||
*
|
||||
* @return the held slot
|
||||
*/
|
||||
public short getSlot() {
|
||||
return slot;
|
||||
}
|
||||
|
||||
/**
|
||||
* Change the final held slot of the player
|
||||
*
|
||||
* @param slot the new held slot
|
||||
* @throws IllegalArgumentException if {@param slot} is not between 0 and 8
|
||||
*/
|
||||
public void setSlot(short slot) {
|
||||
Check.argCondition(!MathUtils.isBetween(slot, 0, 8), "The held slot needs to be between 0 and 8");
|
||||
this.slot = slot;
|
||||
}
|
||||
}
|
@ -1,18 +1,38 @@
|
||||
package net.minestom.server.listener;
|
||||
|
||||
import net.minestom.server.entity.Player;
|
||||
import net.minestom.server.event.player.PlayerChangeHeldSlotEvent;
|
||||
import net.minestom.server.network.packet.client.play.ClientHeldItemChangePacket;
|
||||
import net.minestom.server.utils.MathUtils;
|
||||
|
||||
public class PlayerHeldListener {
|
||||
|
||||
public static void heldListener(ClientHeldItemChangePacket packet, Player player) {
|
||||
short slot = packet.slot;
|
||||
final short slot = packet.slot;
|
||||
if (!MathUtils.isBetween(slot, 0, 8)) {
|
||||
// Incorrect packet, ignore
|
||||
return;
|
||||
}
|
||||
player.refreshHeldSlot(slot);
|
||||
|
||||
PlayerChangeHeldSlotEvent changeHeldSlotEvent = new PlayerChangeHeldSlotEvent(player, slot);
|
||||
player.callEvent(PlayerChangeHeldSlotEvent.class, changeHeldSlotEvent);
|
||||
|
||||
if (!changeHeldSlotEvent.isCancelled()) {
|
||||
// Event hasn't been canceled, process it
|
||||
|
||||
final short resultSlot = changeHeldSlotEvent.getSlot();
|
||||
|
||||
// If the held slot has been changed by the event, send the change to the player
|
||||
if (resultSlot != slot) {
|
||||
player.setHeldItemSlot(resultSlot);
|
||||
} else {
|
||||
// Otherwise, simply refresh the player field
|
||||
player.refreshHeldSlot(resultSlot);
|
||||
}
|
||||
} else {
|
||||
// Event has been canceled, send the last held slot to refresh the client
|
||||
player.setHeldItemSlot(player.getHeldSlot());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user