在另一个if语句中获取库存

时间:2015-05-20 09:48:50

标签: java bukkit

所以基本上我要做的就是让每个玩家都有自己的额外存储包,他们可以升级(稍后开始),但此刻我仍然坚持这一点。我正在制作它,如果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.

        }
    }

}

}

1 个答案:

答案 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)作为关键字,它不会找到关于播放器的任何内容