所以基本上我要做的就是让每个玩家都有自己的额外存储包,他们可以升级(稍后开始),但此刻我仍然坚持这一点。我正在制作它,如果Hashmap"存储"不包含值,以创建新库存并将其设置为值。唯一的问题是我不能再使用库存" bag"在另一个if语句中设置值时打开它。这是我的代码:
package me.impatheimpaler.aqw;
import java.util.HashMap;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.Inventory;
public class Storage implements Listener{
public me.impatheimpaler.aqw.Main plugin;
public HashMap<String, Inventory> storage = new HashMap<String, Inventory>();
public Storage(Main main) {
plugin = main;
}
@EventHandler
public void onInteract(PlayerInteractEvent e) {
if (!(e.getItem().getType() == Material.CHEST)) return;
if (!(e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK)) return;
if (e.getItem().getItemMeta().hasLore() &&
e.getItem().getItemMeta().getLore().contains(ChatColor.GREEN + "A bag for extra storage.")) {
if (storage.containsKey(null) && storage.containsValue(null)) {
Inventory bag = Bukkit.getServer().createInventory(e.getPlayer(), 9, "Storage");
storage.put(e.getPlayer().getName(), bag);
}
if (storage.contains(e.getPlayer().getName(), bag)) {
//Here is the error, as I cannot use the value "bag", because it cannot be
accessed from another if statement.
}
}
}
}
答案 0 :(得分:1)
你可以在if语句之外声明,然后在语句中设置它:
bag
所以,它看起来像这样:
Inventory bag;
if(storage.containsKey(null) && storage.containsValue(null)){
//code
}
此外,不是检查是否Inventory bag;
if (storage.containsKey(null) && storage.containsValue(null)) {
bag = Bukkit.getServer().createInventory(e.getPlayer(), 9, "Storage");
storage.put(e.getPlayer().getName(), bag);
}
if (storage.contains(e.getPlayer().getName(), bag)) {
//use "bag" however you want
}
,而是检查玩家姓名 NOT 是否在storage.containsKey(null)
中,您应该使用:
HashMap
执行if(!storage.containsKey(e.getPlayer().getName()){
会检查地图是否有storage.containsKey(null)
作为关键字,它不会找到关于播放器的任何内容