下面列出了怎么用org.bukkit.event.inventory.InventoryCreativeEvent的API类实例代码及写法,或者点击链接到github查看源代码。
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onInventoryClick(final InventoryClickEvent event) {
if (event instanceof InventoryCreativeEvent
|| event.getWhoClicked() != event.getInventory().getHolder()
|| !ArmorType.isArmorSlot(event.getSlot())) {
return;
}
MatchPlayer player = this.match.getPlayer((Player) event.getWhoClicked());
if (player == null
|| !this.lockedArmorSlots.containsEntry(
player, ArmorType.byInventorySlot(event.getSlot()))) {
return;
}
switch (event.getAction()) {
case PICKUP_ALL:
case PICKUP_HALF:
case PICKUP_SOME:
case PICKUP_ONE:
case SWAP_WITH_CURSOR:
case MOVE_TO_OTHER_INVENTORY:
case DROP_ONE_SLOT:
case DROP_ALL_SLOT:
case HOTBAR_SWAP:
case HOTBAR_MOVE_AND_READD:
case COLLECT_TO_CURSOR:
event.setCancelled(true);
player.sendWarning("This piece of armor cannot be removed", true);
break;
}
}
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onInventoryClick(final InventoryClickEvent event) {
if(event instanceof InventoryCreativeEvent) return;;
// Ensure the player is clicking in their own inventory
// TODO: should we allow items to be locked into other types of inventories?
if(!Objects.equals(event.getWhoClicked(), event.getInventory().getHolder())) return;
// Break out of the switch if the action will move a locked item, otherwise return
switch(event.getAction()) {
case HOTBAR_SWAP:
case HOTBAR_MOVE_AND_READD:
// These actions can move up to two stacks. Check the hotbar stack,
// and then fall through to check the stack under the cursor.
if(isLocked(Slot.Hotbar.forPosition(event.getHotbarButton())
.getItem(event.getWhoClicked().getInventory()))) break;
// fall through
case PICKUP_ALL:
case PICKUP_HALF:
case PICKUP_SOME:
case PICKUP_ONE:
case SWAP_WITH_CURSOR:
case MOVE_TO_OTHER_INVENTORY:
case DROP_ONE_SLOT:
case DROP_ALL_SLOT:
case COLLECT_TO_CURSOR:
// All these actions move only a single stack, except COLLECT_TO_CURSOR,
// which can only move items that are stackable with the one under the cursor,
// and locked items are only stackable with other locked items.
if(isLocked(event.getCurrentItem())) break;
// fall through
default: return;
}
event.setCancelled(true);
sendLockWarning(event.getWhoClicked());
}
@EventHandler(priority = EventPriority.LOWEST)
public void onCreativeSlotChange(InventoryCreativeEvent event) {
if (timeouts.isEmpty()) {
return; // Saves performance for most common case
}
InventoryHolder holder = event.getInventory().getHolder();
if (holder instanceof Player && timeouts.containsKey(((Player) holder).getUniqueId())) {
event.setResult(Event.Result.DENY);
}
}
@EventHandler(priority = EventPriority.LOWEST)
public void onCreativeSlotChange(InventoryCreativeEvent event) {
if (timeouts.isEmpty()) {
return; // Saves performance for most common case
}
InventoryHolder holder = event.getInventory().getHolder();
if (holder instanceof Player && timeouts.containsKey(((Player) holder).getUniqueId())) {
event.setResult(Event.Result.DENY);
}
}
@EventHandler(priority = EventPriority.HIGHEST)
public void inventoryMenuPrevention(InventoryCreativeEvent event) {
if (event.getView().getTopInventory().getTitle().startsWith("CE"))
event.setCancelled(true);
}
@EventHandler(priority = EventPriority.MONITOR)
public void onViewingInventoryClick(InventoryCreativeEvent event) {
updateNextTick(event.getActor());
}