@EventHandler(ignoreCancelled = true, priority = EventPriority.NORMAL)
public void onPlayerInteract(PlayerInteractEvent event) {
Player player = event.getPlayer();
Action action = event.getAction();
ItemStack stack = event.getItem();
// Keys can only be used by right clicking blocks.
if (action != Action.RIGHT_CLICK_BLOCK)
return;
Key key = plugin.getKeyManager().getKey(stack);
// No keys were used in the making of this video.
if (key == null)
return;
Block block = event.getClickedBlock();
BlockState state = block.getState();
if (key instanceof EventKey && state instanceof Chest) {
EventKey eventKey = (EventKey) key;
EventKey.EventKeyData eventKeyData = eventKey.getData(stack.getItemMeta().getLore());
EventType eventType = eventKeyData.getEventType();
List<Inventory> inventories = eventKey.getInventories(eventType);
int inventoryNumber = eventKeyData.getInventoryNumber();
if (inventories.size() < inventoryNumber) {
player.sendMessage(ChatColor.RED + "This key is for " + eventType.getDisplayName() + ChatColor.RED + " loottable " + inventoryNumber + ", whilst there are only " + inventories.size()
+ " possible. Please inform an admin.");
return;
}
Inventory inventory = inventories.get(inventoryNumber - 1);
ItemStack[] contents = inventory.getContents();
Chest chest = (Chest) state;
InventoryHolder inventoryHolder = chest.getInventory().getHolder();
if (inventoryHolder instanceof DoubleChestInventory) {
inventoryHolder = ((DoubleChestInventory) inventoryHolder).getHolder();
}
if (contents.length > chest.getInventory().getSize()) {
player.sendMessage(ChatColor.RED + "This single chest is too small to fit the contents of this key.");
return;
}
Inventory chestInventory = inventoryHolder.getInventory();
if (!InventoryUtils.isEmpty(chestInventory)) {
player.sendMessage(ChatColor.RED + "This chest is not empty.");
return;
}
chestInventory.setContents(inventory.getContents());
decrementHand(player);
event.setCancelled(true);
player.openInventory(chestInventory);
player.sendMessage(ChatColor.YELLOW + "Your " + ChatColor.AQUA + eventType.getDisplayName() + ' ' + eventKey.getDisplayName() + ChatColor.YELLOW + " key has transferred loot "
+ inventoryNumber + ChatColor.YELLOW + " to the chest.");
}
}
KeyListener.java 文件源码
java
阅读 29
收藏 0
点赞 0
评论 0
项目:HCFCore
作者:
评论列表
文章目录