InventoryClickEvent:在自定义库存中右键单击不起作用
InventoryClickEvent: Right-Click in a custom Inventory is not working
我还有一个问题,希望你能帮助我。我尝试在玩家点击定制库存中的物品时传送玩家(在本例中是相思门)。库存本身工作正常,但当我尝试单击该项目时,没有任何反应。
到目前为止,这是我的代码:
库存Class
package de.Daniel260.startup.items;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.inventory.InventoryAction;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
public class HerrDesWindesTalisman implements Listener{
@EventHandler
public void onPlayerInteract (PlayerInteractEvent e) {
Player p = e.getPlayer();
Action a = e.getAction();
if(a.equals(Action.RIGHT_CLICK_AIR) || a.equals(Action.RIGHT_CLICK_BLOCK)) {
if(e.getItem() != null && e.getItem().getType().equals(Material.TOTEM_OF_UNDYING)) {
if(p.hasPermission("quests.herrderwinde")) {
p.sendMessage("Warpmenü");
Inventory inv = Bukkit.createInventory(p, 27, "Ziele");
ItemStack item1 = new ItemStack(Material.ACACIA_DOOR);
ItemMeta imeta1 = item1.getItemMeta();
imeta1.setDisplayName("Reise nach Irgendwo");
item1.setItemMeta(imeta1);
inv.setItem(10, item1);
p.openInventory(inv);
}
else {
p.sendMessage("§4Für dieses Item brauchst du folgende Quest: §6Herr des Windes");
}
}
}
}
@SuppressWarnings("unused")
public void onInventoryClick (InventoryClickEvent e) {
Player p = (Player) e.getWhoClicked();
InventoryAction a = e.getAction();
if(p.getItemOnCursor().getItemMeta().getDisplayName().equals("Reise nach Irgendwo")) {
Location loc = new Location(p.getWorld(), 0, 6, 0);
p.teleport(loc);
}
}
}
首先,你在方法上伪造了@EventHandler
标签。
另外,p.getItemOnCursor()
是在玩家身上而不是在活动中,所以这不是获得物品的好方法。
你应该使用 event.getCurrentItem()
。警告:此方法可以 return null.
这是最后的方法onInventoryClick
:
@EventHandler
public void onInventoryClick (InventoryClickEvent e) {
Player p = (Player) e.getWhoClicked();
if(e.getCurrentItem() != null && e.getCurrentItem().getItemMeta().getDisplayName().equals("Reise nach Irgendwo")) {
p.teleport(new Location(p.getWorld(), 0, 6, 0));
}
}
我还有一个问题,希望你能帮助我。我尝试在玩家点击定制库存中的物品时传送玩家(在本例中是相思门)。库存本身工作正常,但当我尝试单击该项目时,没有任何反应。 到目前为止,这是我的代码: 库存Class
package de.Daniel260.startup.items;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.inventory.InventoryAction;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
public class HerrDesWindesTalisman implements Listener{
@EventHandler
public void onPlayerInteract (PlayerInteractEvent e) {
Player p = e.getPlayer();
Action a = e.getAction();
if(a.equals(Action.RIGHT_CLICK_AIR) || a.equals(Action.RIGHT_CLICK_BLOCK)) {
if(e.getItem() != null && e.getItem().getType().equals(Material.TOTEM_OF_UNDYING)) {
if(p.hasPermission("quests.herrderwinde")) {
p.sendMessage("Warpmenü");
Inventory inv = Bukkit.createInventory(p, 27, "Ziele");
ItemStack item1 = new ItemStack(Material.ACACIA_DOOR);
ItemMeta imeta1 = item1.getItemMeta();
imeta1.setDisplayName("Reise nach Irgendwo");
item1.setItemMeta(imeta1);
inv.setItem(10, item1);
p.openInventory(inv);
}
else {
p.sendMessage("§4Für dieses Item brauchst du folgende Quest: §6Herr des Windes");
}
}
}
}
@SuppressWarnings("unused")
public void onInventoryClick (InventoryClickEvent e) {
Player p = (Player) e.getWhoClicked();
InventoryAction a = e.getAction();
if(p.getItemOnCursor().getItemMeta().getDisplayName().equals("Reise nach Irgendwo")) {
Location loc = new Location(p.getWorld(), 0, 6, 0);
p.teleport(loc);
}
}
}
首先,你在方法上伪造了@EventHandler
标签。
另外,p.getItemOnCursor()
是在玩家身上而不是在活动中,所以这不是获得物品的好方法。
你应该使用 event.getCurrentItem()
。警告:此方法可以 return null.
这是最后的方法onInventoryClick
:
@EventHandler
public void onInventoryClick (InventoryClickEvent e) {
Player p = (Player) e.getWhoClicked();
if(e.getCurrentItem() != null && e.getCurrentItem().getItemMeta().getDisplayName().equals("Reise nach Irgendwo")) {
p.teleport(new Location(p.getWorld(), 0, 6, 0));
}
}