下面列出了org.bukkit.inventory.InventoryView#getInventory ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
/**
* Handles clicks in inventories
*
* @param event the event fired
* @since 0.5.4
*/
@EventHandler(ignoreCancelled = true)
public void onInventoryClick(@NotNull InventoryClickEvent event) {
if (!(event.getInventory().getHolder() instanceof Gui)) {
return;
}
Gui gui = (Gui) event.getInventory().getHolder();
InventoryView view = event.getView();
Inventory inventory = view.getInventory(event.getRawSlot());
if (inventory == null) {
gui.callOnOutsideClick(event);
return;
}
gui.callOnGlobalClick(event);
if (inventory.equals(view.getTopInventory())) {
gui.callOnTopClick(event);
} else {
gui.callOnBottomClick(event);
}
if ((inventory.equals(view.getBottomInventory()) && gui.getState() == Gui.State.TOP) ||
event.getCurrentItem() == null) {
return;
}
List<Pane> panes = gui.getPanes();
//loop through the panes reverse, because the pane with the highest priority (last in list) is most likely to have the correct item
for (int i = panes.size() - 1; i >= 0; i--) {
if (panes.get(i).click(gui, event, 0, 0, 9, gui.getRows() + 4))
break;
}
}
@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);
}
@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;
}