mirror of
https://github.com/Minestom/Minestom.git
synced 2025-03-02 11:21:15 +01:00
Added PlayerAddItemStackEvent and PlayerSetItemStackEvent
This commit is contained in:
parent
7128844563
commit
633d02222a
@ -0,0 +1,46 @@
|
||||
package net.minestom.server.event.player;
|
||||
|
||||
import net.minestom.server.entity.Player;
|
||||
import net.minestom.server.event.CancellableEvent;
|
||||
import net.minestom.server.item.ItemStack;
|
||||
|
||||
/**
|
||||
* Called as a result of {@link net.minestom.server.inventory.PlayerInventory#addItemStack(ItemStack)}
|
||||
*/
|
||||
public class PlayerAddItemStackEvent extends CancellableEvent {
|
||||
|
||||
private Player player;
|
||||
private ItemStack itemStack;
|
||||
|
||||
public PlayerAddItemStackEvent(Player player, ItemStack itemStack) {
|
||||
this.player = player;
|
||||
this.itemStack = itemStack;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the player who has an item stack added to his inventory
|
||||
*
|
||||
* @return the player
|
||||
*/
|
||||
public Player getPlayer() {
|
||||
return player;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the item stack which will be added
|
||||
*
|
||||
* @return the item stack
|
||||
*/
|
||||
public ItemStack getItemStack() {
|
||||
return itemStack;
|
||||
}
|
||||
|
||||
/**
|
||||
* Change the item stack which will be added
|
||||
*
|
||||
* @param itemStack the new item stack
|
||||
*/
|
||||
public void setItemStack(ItemStack itemStack) {
|
||||
this.itemStack = itemStack;
|
||||
}
|
||||
}
|
@ -0,0 +1,47 @@
|
||||
package net.minestom.server.event.player;
|
||||
|
||||
import net.minestom.server.entity.Player;
|
||||
import net.minestom.server.event.CancellableEvent;
|
||||
import net.minestom.server.item.ItemStack;
|
||||
|
||||
/**
|
||||
* Called as a result of {@link net.minestom.server.inventory.PlayerInventory#setItemStack(int, ItemStack)}
|
||||
*/
|
||||
public class PlayerSetItemStackEvent extends CancellableEvent {
|
||||
|
||||
private Player player;
|
||||
private ItemStack itemStack;
|
||||
|
||||
public PlayerSetItemStackEvent(Player player, ItemStack itemStack) {
|
||||
this.player = player;
|
||||
this.itemStack = itemStack;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the player who has an item stack set to his inventory
|
||||
*
|
||||
* @return the player
|
||||
*/
|
||||
public Player getPlayer() {
|
||||
return player;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the item stack which will be set
|
||||
*
|
||||
* @return the item stack
|
||||
*/
|
||||
public ItemStack getItemStack() {
|
||||
return itemStack;
|
||||
}
|
||||
|
||||
/**
|
||||
* Change the item stack which will be set
|
||||
*
|
||||
* @param itemStack the new item stack
|
||||
*/
|
||||
public void setItemStack(ItemStack itemStack) {
|
||||
this.itemStack = itemStack;
|
||||
}
|
||||
|
||||
}
|
@ -2,6 +2,8 @@ package net.minestom.server.inventory;
|
||||
|
||||
import net.minestom.server.entity.Player;
|
||||
import net.minestom.server.event.item.ArmorEquipEvent;
|
||||
import net.minestom.server.event.player.PlayerAddItemStackEvent;
|
||||
import net.minestom.server.event.player.PlayerSetItemStackEvent;
|
||||
import net.minestom.server.inventory.click.ClickType;
|
||||
import net.minestom.server.inventory.click.InventoryClickLoopHandler;
|
||||
import net.minestom.server.inventory.click.InventoryClickProcessor;
|
||||
@ -67,11 +69,26 @@ public class PlayerInventory implements InventoryModifier, InventoryClickHandler
|
||||
|
||||
@Override
|
||||
public void setItemStack(int slot, ItemStack itemStack) {
|
||||
safeItemInsert(slot, itemStack);
|
||||
itemStack = ItemStackUtils.notNull(itemStack);
|
||||
|
||||
PlayerSetItemStackEvent setItemStackEvent = new PlayerSetItemStackEvent(player, itemStack);
|
||||
player.callCancellableEvent(PlayerSetItemStackEvent.class, setItemStackEvent, () -> {
|
||||
ItemStack item = setItemStackEvent.getItemStack();
|
||||
safeItemInsert(slot, item);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized boolean addItemStack(ItemStack itemStack) {
|
||||
itemStack = ItemStackUtils.notNull(itemStack);
|
||||
|
||||
PlayerAddItemStackEvent addItemStackEvent = new PlayerAddItemStackEvent(player, itemStack);
|
||||
player.callEvent(PlayerAddItemStackEvent.class, addItemStackEvent);
|
||||
if (addItemStackEvent.isCancelled())
|
||||
return false;
|
||||
|
||||
itemStack = addItemStackEvent.getItemStack();
|
||||
|
||||
StackingRule stackingRule = itemStack.getStackingRule();
|
||||
for (int i = 0; i < items.length - 10; i++) {
|
||||
ItemStack item = items[i];
|
||||
@ -93,7 +110,7 @@ public class PlayerInventory implements InventoryModifier, InventoryClickHandler
|
||||
return true;
|
||||
}
|
||||
} else if (item.isAir()) {
|
||||
setItemStack(i, itemStack);
|
||||
safeItemInsert(i, itemStack);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -207,8 +224,6 @@ public class PlayerInventory implements InventoryModifier, InventoryClickHandler
|
||||
* @param itemStack the item to insert at the slot
|
||||
*/
|
||||
private synchronized void safeItemInsert(int slot, ItemStack itemStack) {
|
||||
itemStack = ItemStackUtils.notNull(itemStack);
|
||||
|
||||
EntityEquipmentPacket.Slot equipmentSlot;
|
||||
|
||||
if (slot == player.getHeldSlot()) {
|
||||
@ -259,7 +274,7 @@ public class PlayerInventory implements InventoryModifier, InventoryClickHandler
|
||||
*/
|
||||
protected void setItemStack(int slot, int offset, ItemStack itemStack) {
|
||||
slot = convertSlot(slot, offset);
|
||||
safeItemInsert(slot, itemStack);
|
||||
setItemStack(slot, itemStack);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user