下面列出了org.bukkit.event.inventory.InventoryClickEvent#getView ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Override
public boolean click(@NotNull Gui gui, @NotNull InventoryClickEvent event, int paneOffsetX, int paneOffsetY,
int maxLength, int maxHeight) {
int length = Math.min(this.length, maxLength);
int height = Math.min(this.height, maxHeight);
int slot = event.getSlot();
InventoryView view = event.getView();
Inventory inventory = view.getInventory(event.getRawSlot());
int x, y;
if (inventory != null && inventory.equals(view.getBottomInventory())) {
x = (slot % 9) - getX() - paneOffsetX;
y = ((slot / 9) + gui.getRows() - 1) - getY() - paneOffsetY;
if (slot / 9 == 0) {
y = (gui.getRows() + 3) - getY() - paneOffsetY;
}
} else {
x = (slot % 9) - getX() - paneOffsetX;
y = (slot / 9) - getY() - paneOffsetY;
}
if (x < 0 || x >= length || y < 0 || y >= height)
return false;
callOnClick(event);
boolean success = false;
for (Pane pane : panes) {
success = success || pane.click(gui, event, paneOffsetX + getX(),
paneOffsetY + getY(), length, height);
}
return success;
}
@Override
public boolean click(@NotNull Gui gui, @NotNull InventoryClickEvent event, int paneOffsetX, int paneOffsetY,
int maxLength, int maxHeight) {
int length = Math.min(this.length, maxLength);
int height = Math.min(this.height, maxHeight);
int slot = event.getSlot();
InventoryView view = event.getView();
Inventory inventory = view.getInventory(event.getRawSlot());
int x, y;
if (inventory != null && inventory.equals(view.getBottomInventory())) {
x = (slot % 9) - getX() - paneOffsetX;
y = ((slot / 9) + gui.getRows() - 1) - getY() - paneOffsetY;
if (slot / 9 == 0) {
y = (gui.getRows() + 3) - getY() - paneOffsetY;
}
} else {
x = (slot % 9) - getX() - paneOffsetX;
y = (slot / 9) - getY() - paneOffsetY;
}
if (x < 0 || x >= length || y < 0 || y >= height) {
return false;
}
callOnClick(event);
event.setCancelled(true);
int newPaneOffsetX = paneOffsetX + getX();
int newPaneOffsetY = paneOffsetY + getY();
return this.fillPane.click(gui, event, newPaneOffsetX, newPaneOffsetY, length, height) ||
this.backgroundPane.click(gui, event, newPaneOffsetX, newPaneOffsetY, length, height);
}
/**
* Gets clicked inventory
* For API older than 1.8
*
* @param event inventory click event
* @return inventory
*/
public static Inventory getClickedInventory(InventoryClickEvent event) {
int slot = event.getRawSlot();
InventoryView view = event.getView();
if(slot < 0) {
return null;
}
else if(view.getTopInventory() != null && slot < view.getTopInventory().getSize()) {
return view.getTopInventory();
}
else {
return view.getBottomInventory();
}
}
@Override
public boolean click(@NotNull Gui gui, @NotNull InventoryClickEvent event, int paneOffsetX, int paneOffsetY, int maxLength,
int maxHeight) {
int length = Math.min(this.length, maxLength);
int height = Math.min(this.height, maxHeight);
int slot = event.getSlot();
InventoryView view = event.getView();
Inventory inventory = view.getInventory(event.getRawSlot());
int x, y;
if (inventory != null && inventory.equals(view.getBottomInventory())) {
x = (slot % 9) - getX() - paneOffsetX;
y = ((slot / 9) + gui.getRows() - 1) - getY() - paneOffsetY;
if (slot / 9 == 0) {
y = (gui.getRows() + 3) - getY() - paneOffsetY;
}
} else {
x = (slot % 9) - getX() - paneOffsetX;
y = (slot / 9) - getY() - paneOffsetY;
}
//this isn't our item
if (x < 0 || x >= length || y < 0 || y >= height) {
return false;
}
callOnClick(event);
List<Pane> panes = this.panes.get(page);
if (panes == null) {
return false;
}
boolean success = false;
for (Pane pane : panes) {
success = success || pane.click(gui, event, paneOffsetX + getX(),
paneOffsetY + getY(), length, height);
}
return success;
}
@Override
public boolean click(@NotNull Gui gui, @NotNull InventoryClickEvent event, int paneOffsetX, int paneOffsetY,
int maxLength, int maxHeight) {
int length = Math.min(this.length, maxLength);
int height = Math.min(this.height, maxHeight);
int slot = event.getSlot();
InventoryView view = event.getView();
Inventory inventory = view.getInventory(event.getRawSlot());
int x, y;
if (inventory != null && inventory.equals(view.getBottomInventory())) {
x = (slot % 9) - getX() - paneOffsetX;
y = ((slot / 9) + gui.getRows() - 1) - getY() - paneOffsetY;
if (slot / 9 == 0) {
y = (gui.getRows() + 3) - getY() - paneOffsetY;
}
} else {
x = (slot % 9) - getX() - paneOffsetX;
y = (slot / 9) - getY() - paneOffsetY;
}
//this isn't our item
if (x < 0 || x >= length || y < 0 || y >= height)
return false;
callOnClick(event);
ItemStack itemStack = event.getCurrentItem();
if (itemStack == null) {
return false;
}
GuiItem clickedItem = findMatchingItem(items.values(), itemStack);
if (clickedItem == null) {
return false;
}
clickedItem.callAction(event);
return true;
}
@Override
public boolean click(@NotNull Gui gui, @NotNull InventoryClickEvent event, int paneOffsetX, int paneOffsetY,
int maxLength, int maxHeight) {
int length = Math.min(this.length, maxLength);
int height = Math.min(this.height, maxHeight);
int slot = event.getSlot();
InventoryView inventoryView = event.getView();
Inventory inventory = inventoryView.getInventory(event.getRawSlot());
int x, y;
if (inventory != null && inventory.equals(inventoryView.getBottomInventory())) {
x = (slot % 9) - getX() - paneOffsetX;
y = ((slot / 9) + gui.getRows() - 1) - getY() - paneOffsetY;
if (slot / 9 == 0) {
y = (gui.getRows() + 3) - getY() - paneOffsetY;
}
} else {
x = (slot % 9) - getX() - paneOffsetX;
y = (slot / 9) - getY() - paneOffsetY;
}
//this isn't our item
if (x < 0 || x >= length || y < 0 || y >= height)
return false;
callOnClick(event);
ItemStack itemStack = event.getCurrentItem();
if (itemStack == null) {
return false;
}
GuiItem item = findMatchingItem(items, itemStack);
if (item == null) {
return false;
}
item.callAction(event);
return true;
}
@Override
public boolean click(@NotNull Gui gui, @NotNull InventoryClickEvent event, int paneOffsetX, int paneOffsetY,
int maxLength, int maxHeight) {
int length = Math.min(this.length, maxLength);
int height = Math.min(this.height, maxHeight);
int slot = event.getSlot();
InventoryView view = event.getView();
Inventory inventory = view.getInventory(event.getRawSlot());
int x, y;
if (inventory != null && inventory.equals(view.getBottomInventory())) {
x = (slot % 9) - getX() - paneOffsetX;
y = ((slot / 9) + gui.getRows() - 1) - getY() - paneOffsetY;
if (slot / 9 == 0) {
y = (gui.getRows() + 3) - getY() - paneOffsetY;
}
} else {
x = (slot % 9) - getX() - paneOffsetX;
y = (slot / 9) - getY() - paneOffsetY;
}
if (x < 0 || x >= length || y < 0 || y >= height) {
return false;
}
callOnClick(event);
int newPaneOffsetX = paneOffsetX + getX();
int newPaneOffsetY = paneOffsetY + getY();
boolean success = this.fillPane.click(gui, event, newPaneOffsetX, newPaneOffsetY, length, height) ||
this.backgroundPane.click(gui, event, newPaneOffsetX, newPaneOffsetY, length, height);
if (orientation == Orientation.HORIZONTAL) {
setValue((float) (x + 1) / length);
} else if (orientation == Orientation.VERTICAL) {
setValue((float) (y + 1) / height);
} else {
throw new UnsupportedOperationException("Unknown orientation");
}
gui.update();
return success;
}
@Override
public boolean click(@NotNull Gui gui, @NotNull InventoryClickEvent event, int paneOffsetX, int paneOffsetY,
int maxLength, int maxHeight) {
int length = Math.min(this.length, maxLength);
int height = Math.min(this.height, maxHeight);
int slot = event.getSlot();
InventoryView view = event.getView();
Inventory inventory = view.getInventory(event.getRawSlot());
int x, y;
if (inventory != null && inventory.equals(view.getBottomInventory())) {
x = (slot % 9) - getX() - paneOffsetX;
y = ((slot / 9) + gui.getRows() - 1) - getY() - paneOffsetY;
if (slot / 9 == 0) {
y = (gui.getRows() + 3) - getY() - paneOffsetY;
}
} else {
x = (slot % 9) - getX() - paneOffsetX;
y = (slot / 9) - getY() - paneOffsetY;
}
//this isn't our item
if (x < 0 || x >= length || y < 0 || y >= height) {
return false;
}
callOnClick(event);
panes.get(position).click(gui, event, paneOffsetX + x, paneOffsetY + y, length, height);
position++;
if (position == panes.size()) {
position = 0;
}
gui.update();
return true;
}
@Override
public boolean click(@NotNull Gui gui, @NotNull InventoryClickEvent event, int paneOffsetX, int paneOffsetY,
int maxLength, int maxHeight) {
int length = Math.min(this.length, maxLength);
int height = Math.min(this.height, maxHeight);
int slot = event.getSlot();
InventoryView view = event.getView();
Inventory inventory = view.getInventory(event.getRawSlot());
int x, y;
if (inventory != null && inventory.equals(view.getBottomInventory())) {
x = (slot % 9) - getX() - paneOffsetX;
y = ((slot / 9) + gui.getRows() - 1) - getY() - paneOffsetY;
if (slot / 9 == 0) {
y = (gui.getRows() + 3) - getY() - paneOffsetY;
}
} else {
x = (slot % 9) - getX() - paneOffsetX;
y = (slot / 9) - getY() - paneOffsetY;
}
//this isn't our item
if (x < 0 || x >= length || y < 0 || y >= height) {
return false;
}
callOnClick(event);
int newX = paneOffsetX + x;
int newY = paneOffsetY + y;
if (enabled) {
enabledPane.click(gui, event, newX, newY, length, height);
} else {
disabledPane.click(gui, event, newX, newY, length, height);
}
toggle();
gui.update();
return true;
}
@EventHandler(priority = EventPriority.MONITOR)
public void onInventoryClick(InventoryClickEvent e) {
// check if the event has been cancelled by another plugin
if (!e.isCancelled()) {
HumanEntity ent = e.getWhoClicked();
// not really necessary
if (ent instanceof Player) {
Player player = (Player) ent;
Inventory inv = e.getInventory();
// see if the event is about an anvil
if (inv instanceof AnvilInventory) {
InventoryView view = e.getView();
int rawSlot = e.getRawSlot();
// compare the raw slot with the inventory view to make sure we are talking about the upper inventory
if (rawSlot == view.convertSlot(rawSlot)) {
/*
slot 0 = left item slot
slot 1 = right item slot
slot 2 = result item slot
see if the player clicked in the result item slot of the anvil inventory
*/
if (rawSlot == 2) {
/*
get the current item in the result slot
I think inv.getItem(rawSlot) would be possible too
*/
ItemStack item = e.getCurrentItem();
// check if there is an item in the result slot
if (item != null) {
ItemMeta meta = item.getItemMeta();
// it is possible that the item does not have meta data
if (meta != null) {
// see whether the item is beeing renamed
if (meta.hasDisplayName()) {
String displayName = meta.getDisplayName();
ItemManager.setName(item, displayName);
}
}
}
}
}
}
}
}
}
@EventHandler(priority = EventPriority.HIGHEST)
public void OnInventoryClick(InventoryClickEvent event) {
boolean currentEmpty = (event.getCurrentItem() == null) || (ItemManager.getId(event.getCurrentItem()) == CivData.AIR);
boolean cursorEmpty = (event.getCursor() == null) || (ItemManager.getId(event.getCursor()) == CivData.AIR);
if (currentEmpty && cursorEmpty) {
return;
}
convertLegacyItem(event);
if (event.getRawSlot() < 0) {
//I guess this means "drop the item?"
//CivLog.debug("GET RAW WAS NEGATIVE, cancel this event it should be invalid.");
//event.setResult(Result.DENY);
//event.setCancelled(true);
//try {
// Player player = CivGlobal.getPlayer(event.getWhoClicked().getName());
// player.updateInventory();
//} catch (CivException e) {
//}
return;
}
InventoryView view = event.getView();
Inventory clickedInv;
Inventory otherInv;
if (view.getType().equals(InventoryType.CRAFTING)) {
//This is the player's own inventory. For some reason it requires
//special treatment. The 'top' inventory is the 2x2 crafting
//area plus the output. During shift click, items do not go there
//so the otherInv should always be the player's inventory aka the bottom.
if (event.getRawSlot() <= 4) {
clickedInv = view.getTopInventory();
otherInv = view.getBottomInventory();
} else {
clickedInv = view.getBottomInventory();
otherInv = view.getBottomInventory();
}
} else {
if (event.getRawSlot() == view.convertSlot(event.getRawSlot())) {
//Clicked in the top holder
clickedInv = view.getTopInventory();
otherInv = view.getBottomInventory();
} else {
clickedInv = view.getBottomInventory();
otherInv = view.getTopInventory();
}
}
LoreMaterial current = LoreMaterial.getMaterial(event.getCurrentItem());
LoreMaterial cursor = LoreMaterial.getMaterial(event.getCursor());
if (event.isShiftClick()) {
// Shift click is _always_ current item.
// CustomItemStack is = new CustomItemStack(event.getCurrentItem());
if (current != null) {
//if (is.isCustomItem() && (is.getMaterial() instanceof CustomMaterialExtended)) {
// Calling onInvShiftClick Event.
//((CustomMaterialExtended)is.getMaterial()).onInvShiftClick(event, clickedInv, otherInv, is.getItem());
current.onInvShiftClick(event, clickedInv, otherInv, event.getCurrentItem());
//}
}
} else {
if (!currentEmpty && !cursorEmpty) {
//CustomItemStack currentIs = new CustomItemStack(event.getCurrentItem());
//CustomItemStack cursorIs = new CustomItemStack(event.getCursor());
if (current != null) {
current.onInvItemSwap(event, clickedInv, event.getCursor(), event.getCurrentItem());
}
if (cursor != null) {
cursor.onInvItemSwap(event, clickedInv, event.getCursor(), event.getCurrentItem());
}
} else if (!currentEmpty) {
// This is a pickup event.
//CustomItemStack is = new CustomItemStack(event.getCurrentItem());
if (current != null) {
// Calling onInvItemPickup Event.
current.onInvItemPickup(event, clickedInv, event.getCurrentItem());
}
} else {
// Implied !cursorEmpty
if (cursor != null) {
// Calling onInvItemDrop Event.
cursor.onInvItemDrop(event, clickedInv, event.getCursor());
}
}
}
}