只需在一个类中编写代码,然后编写:
case "example":
player.openInventory(exampleInv);
break;
但是因为我喜欢我的东西有组织和良好的排序,我在另一个类中编写了库存,作为库存点击事件。
下面是带有InvClickEvent
的类:
package de.t0x1ccr34t0r.charactertrails.listeners;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
public class InventoryListener implements Listener{
@EventHandler
public void onInvClick(InventoryClickEvent event) {
if(event.getCurrentItem() == null) return;
if(event.getView().getTitle() == "§5Trails:"){
Player player = (Player) event.getWhoClicked();
event.setCancelled(true);
if(event.getCurrentItem().getItemMeta().hasLocalizedName()) {
switch (event.getCurrentItem().getItemMeta().getLocalizedName()) {
case "Close":
player.closeInventory();
break;
case "Copper":
player.closeInventory();
break;
case "Iron":
player.closeInventory();
break;
case "Gold":
player.closeInventory();
break;
case "Diamond":
player.closeInventory();
break;
case "Emerald":
player.closeInventory();
break;
}
}
}
}
}
这一切都说player.closeinventory()
,因为player.openInventory()
还不工作,我需要帮助。我做了几个类,比如copper_Inventory
,我在这里向你展示:
package de.t0x1ccr34t0r.charactertrails.inventories;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.ArrayList;
public class Copper_Inventory implements CommandExecutor {
@Override
public boolean onCommand(CommandSender sender1, Command cmd1, String s1, String[] strings1) {
if(!(sender1 instanceof Player)) return false;
Player player1 = (Player) sender1;
Inventory copperInventory = Bukkit.createInventory(null , 4 * 9 , "§5Copper Trails:");
ItemStack ia = new ItemStack(Material.BARRIER);
ItemMeta ma = ia.getItemMeta();
ma.setLocalizedName("Close");
ma.setDisplayName("§cClose");
ia.setItemMeta(ma);
copperInventory.setItem(31 , ia);
ItemStack ib = new ItemStack(Material.ARROW);
ItemMeta mb = ib.getItemMeta();
mb.setLocalizedName("Back");
mb.setDisplayName("§7Back");
ib.setItemMeta(mb);
copperInventory.setItem(27 , ib);
player1.openInventory(copperInventory);
return false;
}
}
这样代码就能正常工作了。但只有在游戏中的命令。最后,我想要这样的东西:
case "copper":
player.openInventory(copperInventory);
break;
但这显然是行不通的,因为程序找不到“copperInventory”。
我在“铜”的情况下使用“铜”这个词:它看起来像这样,并且已经工作了:
package de.t0x1ccr34t0r.charactertrails.inventories;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.ArrayList;
public class Main_Inventory implements CommandExecutor {
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if(!(sender instanceof Player)) return false;
Player player = (Player) sender;
Inventory mainInventory = Bukkit.createInventory(null , 3 * 9 , "§5Trails:");
ItemStack i1 = new ItemStack(Material.COPPER_INGOT);
ItemMeta m1 = i1.getItemMeta();
m1.setLocalizedName("Copper");
m1.setDisplayName(ChatColor.WHITE + "example");
i1.setItemMeta(m1);
mainInventory.setItem(11 , i1);
player.openInventory(mainInventory);
return false;
}
}
所以我现在的问题是:如何在“case“copper”中定义公共类Copper_Inventory中的变量“copperInventory”:在public class InventoryListener中。
另外,我不知道这是否重要,您可能会看到这些类不在同一个包中。我做了多个子包,以保持一切顺利。
最后,我的代码应该是这样的:
case "copper":
player.openInventory(copperInventory);
break;
但是我不知道如何在其他类中使用变量。
你能帮我吗?
1条答案
按热度按时间pu3pd22g1#
这个问题是因为变量超出了你的实际作用域。它是在另一个方法中创建的,现在变量本身是不可访问的。
如果你想保持相同的库存(不特别推荐),你可以放入一个
HashMap<>()
,然后再拿。示例:然后,在关闭库存时,用途:
player.openInventort(Copper_Inventory.INVENTORIES.get(player))
。但是,最值得推荐的方式不是这一种。
重新打开即可
你可以创建一个新的类,它可以是这样的:
然后,每次使用
player.openInventory(Inventories.createCopperInventory(player))
。