mirror of
https://github.com/Minestom/Minestom.git
synced 2025-02-21 14:52:00 +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;
|
package net.minestom.server.listener;
|
||||||
|
|
||||||
import net.minestom.server.entity.Player;
|
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.network.packet.client.play.ClientHeldItemChangePacket;
|
||||||
import net.minestom.server.utils.MathUtils;
|
import net.minestom.server.utils.MathUtils;
|
||||||
|
|
||||||
public class PlayerHeldListener {
|
public class PlayerHeldListener {
|
||||||
|
|
||||||
public static void heldListener(ClientHeldItemChangePacket packet, Player player) {
|
public static void heldListener(ClientHeldItemChangePacket packet, Player player) {
|
||||||
short slot = packet.slot;
|
final short slot = packet.slot;
|
||||||
if (!MathUtils.isBetween(slot, 0, 8)) {
|
if (!MathUtils.isBetween(slot, 0, 8)) {
|
||||||
// Incorrect packet, ignore
|
// Incorrect packet, ignore
|
||||||
return;
|
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