Added PlayerAddItemStackEvent and PlayerSetItemStackEvent

This commit is contained in:
Felix Cravic 2020-05-31 21:30:46 +02:00
parent 7128844563
commit 633d02222a
3 changed files with 113 additions and 5 deletions

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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);
}
/**