@EventHandler
public void onPlayerPickupItem(PlayerPickupItemEvent event) {
// When this event is fired, the ItemStack in the Item being picked up is temporarily
// set to the amount that will actually be picked up, while the difference from the
// actual amount in the stack is available from getRemaining(). When the event returns,
// the original amount is restored to the stack, meaning that we can't change the amount
// from inside the event, so instead we replace the entire stack.
int initialQuantity = event.getItem().getItemStack().getAmount();
PlayerItemTransferEvent transferEvent = new PlayerItemTransferEvent(
event, ItemTransferEvent.Type.PICKUP, event.getPlayer(),
Optional.empty(),
Optional.of(new InventorySlot<>(event.getPlayer().getInventory())),
event.getItem().getItemStack(), event.getItem(),
initialQuantity, event.getPlayer().getOpenInventory().getCursor()
);
this.callEvent(transferEvent);
int quantity = Math.min(transferEvent.getQuantity(), initialQuantity);
if(!event.isCancelled() && quantity < initialQuantity) {
event.setCancelled(true);
if(quantity > 0) {
ItemStack stack = event.getItem().getItemStack().clone();
stack.setAmount(stack.getAmount() - quantity);
event.getItem().setItemStack(stack);
stack = stack.clone();
stack.setAmount(quantity);
event.getPlayer().getInventory().addItem(stack);
event.getPlayer().playSound(event.getPlayer().getLocation(), Sound.ENTITY_ITEM_PICKUP, 1, 1);
}
}
}
ItemTransferListener.java 文件源码
java
阅读 27
收藏 0
点赞 0
评论 0
项目:ProjectAres
作者:
评论列表
文章目录