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.entity.Player;
|
||||||
import net.minestom.server.event.item.ArmorEquipEvent;
|
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.ClickType;
|
||||||
import net.minestom.server.inventory.click.InventoryClickLoopHandler;
|
import net.minestom.server.inventory.click.InventoryClickLoopHandler;
|
||||||
import net.minestom.server.inventory.click.InventoryClickProcessor;
|
import net.minestom.server.inventory.click.InventoryClickProcessor;
|
||||||
@ -67,11 +69,26 @@ public class PlayerInventory implements InventoryModifier, InventoryClickHandler
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setItemStack(int slot, ItemStack itemStack) {
|
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
|
@Override
|
||||||
public synchronized boolean addItemStack(ItemStack itemStack) {
|
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();
|
StackingRule stackingRule = itemStack.getStackingRule();
|
||||||
for (int i = 0; i < items.length - 10; i++) {
|
for (int i = 0; i < items.length - 10; i++) {
|
||||||
ItemStack item = items[i];
|
ItemStack item = items[i];
|
||||||
@ -93,7 +110,7 @@ public class PlayerInventory implements InventoryModifier, InventoryClickHandler
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
} else if (item.isAir()) {
|
} else if (item.isAir()) {
|
||||||
setItemStack(i, itemStack);
|
safeItemInsert(i, itemStack);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -207,8 +224,6 @@ public class PlayerInventory implements InventoryModifier, InventoryClickHandler
|
|||||||
* @param itemStack the item to insert at the slot
|
* @param itemStack the item to insert at the slot
|
||||||
*/
|
*/
|
||||||
private synchronized void safeItemInsert(int slot, ItemStack itemStack) {
|
private synchronized void safeItemInsert(int slot, ItemStack itemStack) {
|
||||||
itemStack = ItemStackUtils.notNull(itemStack);
|
|
||||||
|
|
||||||
EntityEquipmentPacket.Slot equipmentSlot;
|
EntityEquipmentPacket.Slot equipmentSlot;
|
||||||
|
|
||||||
if (slot == player.getHeldSlot()) {
|
if (slot == player.getHeldSlot()) {
|
||||||
@ -259,7 +274,7 @@ public class PlayerInventory implements InventoryModifier, InventoryClickHandler
|
|||||||
*/
|
*/
|
||||||
protected void setItemStack(int slot, int offset, ItemStack itemStack) {
|
protected void setItemStack(int slot, int offset, ItemStack itemStack) {
|
||||||
slot = convertSlot(slot, offset);
|
slot = convertSlot(slot, offset);
|
||||||
safeItemInsert(slot, itemStack);
|
setItemStack(slot, itemStack);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user