2016-07-09 2 views
3

현재 내 서버 네트워크 용 GUI 샵을 코딩하고 있는데 두 가지 이상한 문제가 있습니다. 나는 항목 ID (161) 및 두 개의 서로 다른 메타 ID의 (0과 1) 난 그냥 여기에 2Bukkit/Spigot : Plugin - Custom GUI Shop error

의 메타 ID를 반환받을과 2 개 잎을 취득 할 때마다

첫 번째 문제는, 것은 내가 무엇을 얻을 내 디버그 할 때이 항목의 데이터 가져 오려고 시도 : Problem 1

을 그리고 이것은 내가 내 인벤토리에서 무엇을 얻을 수 있습니다 : Problem 1

하지만 (예를 들어)이 있어야한다 : 161/0 또는 161/1

Spigot/Bukkit 자체에서이 항목 메타를 얻으므로 어쨌든 혼자서받지 않습니다.

내가 가진 다음 문제는 양모를 구입할 때마다 9 번째 바이트까지만 완벽하게 작동한다는 것입니다. 그러면 위의 모든 항목이 오렌지 울이나 클레이 또는 유리를 매회 반환합니다.

나는 항목을 표시하고 어떻게 그게 전부 : 그 표시가 GUI에 올바른 표시됩니다

if(t == ShopType.SHOP_DECORATION){ 
     inv = Bukkit.createInventory(null, 54, "Shop: Decoration"); 
     createDisplay(Material.WOOL, (byte)0, inv, 0, null, getShopLore("wool")); 
     createDisplay(Material.WOOL, (byte)1, inv, 1, null, getShopLore("wool2")); 
     createDisplay(Material.WOOL, (byte)2, inv, 2, null, getShopLore("wool3")); 
     createDisplay(Material.WOOL, (byte)3, inv, 3, null, getShopLore("wool4")); 
     createDisplay(Material.WOOL, (byte)4, inv, 4, null, getShopLore("wool5")); 
     createDisplay(Material.WOOL, (byte)5, inv, 5, null, getShopLore("wool6")); 
     createDisplay(Material.WOOL, (byte)6, inv, 6, null, getShopLore("wool7")); 
     createDisplay(Material.WOOL, (byte)7, inv, 7, null, getShopLore("wool8")); 
     createDisplay(Material.WOOL, (byte)8, inv, 8, null, getShopLore("wool9")); 
     createDisplay(Material.WOOL, (byte)9, inv, 9, null, getShopLore("woola")); 
     createDisplay(Material.WOOL, (byte)10, inv, 10, null, getShopLore("woolb")); 
     createDisplay(Material.WOOL, (byte)11, inv, 11, null, getShopLore("woolc")); 
     createDisplay(Material.WOOL, (byte)12, inv, 12, null, getShopLore("woold")); 
     createDisplay(Material.WOOL, (byte)13, inv, 13, null, getShopLore("woole")); 
     createDisplay(Material.WOOL, (byte)14, inv, 14, null, getShopLore("woolf")); 
     createDisplay(Material.WOOL, (byte)15, inv, 15, null, getShopLore("woolg")); 
     createDisplay(Material.STAINED_GLASS, (byte)0, inv, 16, null, getShopLore("glass")); 
     createDisplay(Material.STAINED_GLASS, (byte)1, inv, 17, null, getShopLore("glass2")); 
     createDisplay(Material.STAINED_GLASS, (byte)2, inv, 18, null, getShopLore("glass3")); 
     createDisplay(Material.STAINED_GLASS, (byte)3, inv, 19, null, getShopLore("glass4")); 
     createDisplay(Material.STAINED_GLASS, (byte)4, inv, 20, null, getShopLore("glass5")); 
     createDisplay(Material.STAINED_GLASS, (byte)5, inv, 21, null, getShopLore("glass6")); 
     createDisplay(Material.STAINED_GLASS, (byte)6, inv, 22, null, getShopLore("glass7")); 
     createDisplay(Material.STAINED_GLASS, (byte)7, inv, 23, null, getShopLore("glass8")); 
     createDisplay(Material.STAINED_GLASS, (byte)8, inv, 24, null, getShopLore("glass9")); 
     createDisplay(Material.STAINED_GLASS, (byte)9, inv, 25, null, getShopLore("glassa")); 
     createDisplay(Material.STAINED_GLASS, (byte)10, inv, 26, null, getShopLore("glassb")); 
     createDisplay(Material.STAINED_GLASS, (byte)11, inv, 27, null, getShopLore("glassc")); 
     createDisplay(Material.STAINED_GLASS, (byte)12, inv, 28, null, getShopLore("glassd")); 
     createDisplay(Material.STAINED_GLASS, (byte)13, inv, 29, null, getShopLore("glasse")); 
     createDisplay(Material.STAINED_GLASS, (byte)14, inv, 30, null, getShopLore("glassf")); 
     createDisplay(Material.STAINED_GLASS, (byte)15, inv, 31, null, getShopLore("glassg")); 
     createDisplay(Material.STAINED_CLAY, (byte)0, inv, 32, null, getShopLore("clay")); 
     createDisplay(Material.STAINED_CLAY, (byte)1, inv, 33, null, getShopLore("clay2")); 
     createDisplay(Material.STAINED_CLAY, (byte)2, inv, 34, null, getShopLore("clay3")); 
     createDisplay(Material.STAINED_CLAY, (byte)3, inv, 35, null, getShopLore("clay4")); 
     createDisplay(Material.STAINED_CLAY, (byte)4, inv, 36, null, getShopLore("clay5")); 
     createDisplay(Material.STAINED_CLAY, (byte)5, inv, 37, null, getShopLore("clay6")); 
     createDisplay(Material.STAINED_CLAY, (byte)6, inv, 38, null, getShopLore("clay7")); 
     createDisplay(Material.STAINED_CLAY, (byte)7, inv, 39, null, getShopLore("clay8")); 
     createDisplay(Material.STAINED_CLAY, (byte)8, inv, 40, null, getShopLore("clay9")); 
     createDisplay(Material.STAINED_CLAY, (byte)9, inv, 41, null, getShopLore("claya")); 
     createDisplay(Material.STAINED_CLAY, (byte)10, inv, 42, null, getShopLore("clayb")); 
     createDisplay(Material.STAINED_CLAY, (byte)11, inv, 43, null, getShopLore("clayc")); 
     createDisplay(Material.STAINED_CLAY, (byte)12, inv, 44, null, getShopLore("clayd")); 
     createDisplay(Material.STAINED_CLAY, (byte)13, inv, 45, null, getShopLore("claye")); 
     createDisplay(Material.STAINED_CLAY, (byte)14, inv, 46, null, getShopLore("clayf")); 
     createDisplay(Material.STAINED_CLAY, (byte)15, inv, 47, null, getShopLore("clayg")); 
     createButtons(inv); 
     p.openInventory(inv); 
    } 

을하지만, 내가 그들을 구입하고자 할 때 난 항상 후 오렌지 양모 또는 점토 또는 유리를 얻을 시안 울/점토/유리.

내가 그들에게 그것을 제공하는 방법입니다 누군가가 항목을 클릭 할 때이 실행되는 코드입니다

private static void addItem(String item, int price, ShopType type){ 
    priceList.put(item, price); 
    slotList.put(item, type); 
    JSONObject temp = new JSONObject(); 
    switch(type){ 
    case SHOP_REDSTONE: 
     temp.put("slot", a); 
     temp.put("type", type.toString()); 
     temp.put("name", item); 
     temp.put("price", price); 
     a++; 
     break; 
    case SHOP_ORES: 
     temp.put("slot", b); 
     temp.put("type", type.toString()); 
     temp.put("name", item); 
     temp.put("price", price); 
     b++; 
     break; 
    case SHOP_SEEDS: 
     temp.put("slot", c); 
     temp.put("type", type.toString()); 
     temp.put("name", item); 
     temp.put("price", price); 
     c++; 
     break; 
    case SHOP_FOOD: 
     temp.put("slot", d); 
     temp.put("type", type.toString()); 
     temp.put("name", item); 
     temp.put("price", price); 
     d++; 
     break; 
    case SHOP_DROPS: 
     temp.put("slot", e); 
     temp.put("type", type.toString()); 
     temp.put("name", item); 
     temp.put("price", price); 
     e++; 
     break; 
    case SHOP_MISC: 
     temp.put("slot", f); 
     temp.put("type", type.toString()); 
     temp.put("name", item); 
     temp.put("price", price); 
     f++; 
     break; 
    case SHOP_DECORATION: 
     temp.put("slot", g); 
     temp.put("type", type.toString()); 
     temp.put("name", item); 
     temp.put("price", price); 
     g++; 
     break; 
    } 
    System.out.println("A: " +a); 
    System.out.println("B: " +b); 
    System.out.println("C: " +c); 
    System.out.println("D: " +d); 
    System.out.println("E: " +e); 
    System.out.println("F: " +f); 
    System.out.println("G: " +g); 
    debug.add(temp); 
} 

:

public static boolean withdrawPlayer(Player player, double amount, int am){ 
    double money = econ.getBalance(player); 
    if(money < amount){ 
     return false; 
    } 
    econ.withdrawPlayer(player, amount); 
    JSONObject json = Shop.getItemData(player); 
    int itemID = json.getInt("item_id"); 
    byte itemMeta = (byte)json.getInt("item_data"); 
    ItemStack item = new ItemStack(itemID, 1, itemMeta); 

    item.setAmount(am); 
    player.sendMessage("Debug: " + item.getAmount() + " " + item.getType() + " -- Data: " + Shop.getData(item.getData()) + " ||| " + item.getData()); 
    player.getInventory().addItem(item); 
    player.updateInventory(); 
    return true; 
} 

이 내가 된 JSONObject 추가하는 방법입니다

@EventHandler 
public void onInventoryClick(InventoryClickEvent e){ 
    Player p = (Player) e.getWhoClicked(); 
    int slot = e.getSlot(); 

    if (e.getSlotType().equals(SlotType.OUTSIDE)) { 
     return; 
    } 


    if(e.getClickedInventory().getName().equalsIgnoreCase("Menu")){ 

     if (e.getSlotType().equals(SlotType.OUTSIDE)) { 
      return; 
     } 

     for(ClickType type : ClickType.values()){ 
      if(e.getClick() == type){ 
       e.setCancelled(true); 
      } 
     } 

     for(InventoryAction action : InventoryAction.values()){ 
      if(e.getAction() == action){ 
       e.setCancelled(true); 
      } 
     } 
     if(e.isRightClick() || e.isLeftClick()){ 
      e.setCancelled(true); 
      switch(slot){ 
      case 0: 
       p.closeInventory(); 
       new Shop(ShopType.SHOP_REDSTONE, p); 
       break; 
      case 1: 
       p.closeInventory(); 
       new Shop(ShopType.SHOP_ORES, p); 
       break; 
      case 2: 
       p.closeInventory(); 
       new Shop(ShopType.SHOP_SEEDS, p); 
       break; 
      case 3: 
       p.closeInventory(); 
       new Shop(ShopType.SHOP_FOOD, p); 
       break; 
      case 4: 
       p.closeInventory(); 
       new Shop(ShopType.SHOP_DROPS, p); 
       break; 
      case 5: 
       p.closeInventory(); 
       new Shop(ShopType.SHOP_MISC, p); 
       break; 
      case 6: 
       p.closeInventory(); 
       new Shop(ShopType.SHOP_DECORATION, p); 
       break; 
      } 
     } 
    } 

    if(e.getClickedInventory().getName().contains("Shop: ")){ 
     if (e.getSlotType().equals(SlotType.OUTSIDE)) { 
      return; 
     } 

     for(ClickType type : ClickType.values()){ 
      if(e.getClick() == type){ 
       e.setCancelled(true); 
      } 
     } 

     for(InventoryAction action : InventoryAction.values()){ 
      if(e.getAction() == action){ 
       e.setCancelled(true); 
      } 
     } 

     if(e.isRightClick() || e.isLeftClick()){ 
      e.setCancelled(true); 
      ItemStack it = e.getCurrentItem(); 
      if(it == null){ 
       return; 
      } 
      int paperID = 339; 
      if(it.getTypeId() == paperID){ 
       Shop.goBack(p); 
      } 
     } 
    } 



    switch(e.getClickedInventory().getName()){ 
    case "Shop: Redstone": 
     e.setCancelled(true); 
     if(e.isLeftClick() && e.getCurrentItem().getTypeId() != 0){ 
      ItemStack item = e.getCurrentItem(); 
      Material mat = item.getType(); 
      Shop.prepareBuy(p, slot, ShopType.SHOP_REDSTONE, mat.name()); 
      Shop.addItemData(p, e.getCurrentItem().getTypeId(), Shop.getData(e.getCurrentItem().getData())); 
     } 

     if(e.isRightClick() && e.getCurrentItem().getTypeId() != 0){ 
      ItemStack item = e.getCurrentItem(); 
      Material mat = item.getType(); 
      Shop.prepareSell(p, slot, ShopType.SHOP_REDSTONE, mat.name()); 
      Shop.addItemData(p, e.getCurrentItem().getTypeId(), Shop.getData(e.getCurrentItem().getData())); 
     } 
     break; 
    case "Shop: Ores": 
     e.setCancelled(true); 
     if(e.isLeftClick() && e.getCurrentItem().getTypeId() != 0){ 
      ItemStack item = e.getCurrentItem(); 
      Material mat = item.getType(); 
      Shop.prepareBuy(p, slot, ShopType.SHOP_ORES, mat.name()); 
      Shop.addItemData(p, e.getCurrentItem().getTypeId(), Shop.getData(e.getCurrentItem().getData())); 
     } 

     if(e.isRightClick() && e.getCurrentItem().getTypeId() != 0){ 
      ItemStack item = e.getCurrentItem(); 
      Material mat = item.getType(); 
      Shop.prepareSell(p, slot, ShopType.SHOP_ORES, mat.name()); 
      Shop.addItemData(p, e.getCurrentItem().getTypeId(), Shop.getData(e.getCurrentItem().getData())); 
     } 
     break; 
    case "Shop: Seeds": 
     e.setCancelled(true); 
     if(e.isLeftClick() && e.getCurrentItem().getTypeId() != 0){ 
      ItemStack item = e.getCurrentItem(); 
      Material mat = item.getType(); 
      Shop.prepareBuy(p, slot, ShopType.SHOP_SEEDS, mat.name()); 
      Shop.addItemData(p, e.getCurrentItem().getTypeId(), Shop.getData(e.getCurrentItem().getData())); 
     } 

     if(e.isRightClick() && e.getCurrentItem().getTypeId() != 0){ 
      ItemStack item = e.getCurrentItem(); 
      Material mat = item.getType(); 
      Shop.prepareSell(p, slot, ShopType.SHOP_SEEDS, mat.name()); 
      Shop.addItemData(p, e.getCurrentItem().getTypeId(), Shop.getData(e.getCurrentItem().getData())); 
     } 
     break; 
    case "Shop: Food": 
     e.setCancelled(true); 
     if(e.isLeftClick() && e.getCurrentItem().getTypeId() != 0){ 
      ItemStack item = e.getCurrentItem(); 
      Material mat = item.getType(); 
      Shop.prepareBuy(p, slot, ShopType.SHOP_FOOD, mat.name()); 
      Shop.addItemData(p, e.getCurrentItem().getTypeId(), Shop.getData(e.getCurrentItem().getData())); 
     } 


     if(e.isRightClick() && e.getCurrentItem().getTypeId() != 0){ 
      ItemStack item = e.getCurrentItem(); 
      Material mat = item.getType(); 
      Shop.prepareSell(p, slot, ShopType.SHOP_FOOD, mat.name()); 
      Shop.addItemData(p, e.getCurrentItem().getTypeId(), Shop.getData(e.getCurrentItem().getData())); 
     } 
     break; 
    case "Shop: Drops": 
     e.setCancelled(true); 
     if(e.isLeftClick() && e.getCurrentItem().getTypeId() != 0){ 
      ItemStack item = e.getCurrentItem(); 
      Material mat = item.getType(); 
      Shop.prepareBuy(p, slot, ShopType.SHOP_DROPS, mat.name()); 
      Shop.addItemData(p, e.getCurrentItem().getTypeId(), Shop.getData(e.getCurrentItem().getData())); 
     } 

     if(e.isRightClick() && e.getCurrentItem().getTypeId() != 0){ 
      ItemStack item = e.getCurrentItem(); 
      Material mat = item.getType(); 
      Shop.prepareSell(p, slot, ShopType.SHOP_DROPS, mat.name()); 
      Shop.addItemData(p, e.getCurrentItem().getTypeId(), Shop.getData(e.getCurrentItem().getData())); 
     } 
     break; 
    case "Shop: Misc.": 
     e.setCancelled(true); 
     if(e.isLeftClick() && e.getCurrentItem().getTypeId() != 0){ 
      ItemStack item = e.getCurrentItem(); 
      Material mat = item.getType(); 
      Shop.prepareBuy(p, slot, ShopType.SHOP_MISC, mat.name()); 
      Shop.addItemData(p, e.getCurrentItem().getTypeId(), Shop.getData(e.getCurrentItem().getData())); 
     } 

     if(e.isRightClick() && e.getCurrentItem().getTypeId() != 0){ 
      ItemStack item = e.getCurrentItem(); 
      Material mat = item.getType(); 
      Shop.prepareSell(p, slot, ShopType.SHOP_MISC, mat.name()); 
      Shop.addItemData(p, e.getCurrentItem().getTypeId(), Shop.getData(e.getCurrentItem().getData())); 
     } 
     break; 
    case "Shop: Decoration": 
     e.setCancelled(true); 
     if(e.getClick() == ClickType.DROP){ 
      return; 
     } 
     if(e.isLeftClick() && e.getCurrentItem().getTypeId() != 0){ 
      ItemStack item = e.getCurrentItem(); 
      Material mat = item.getType(); 
      Shop.prepareBuy(p, slot, ShopType.SHOP_DECORATION, mat.name()); 
      Shop.addItemData(p, e.getCurrentItem().getTypeId(), Shop.getData(e.getCurrentItem().getData())); 
     } 

     if(e.isRightClick() && e.getCurrentItem().getTypeId() != 0){ 
      ItemStack item = e.getCurrentItem(); 
      Material mat = item.getType(); 
      Shop.prepareSell(p, slot, ShopType.SHOP_DECORATION, mat.name()); 
      Shop.addItemData(p, e.getCurrentItem().getTypeId(), Shop.getData(e.getCurrentItem().getData())); 
     } 
     break; 
    } 
} 

제발, 제가 뭔가를 놓치고 있습니까, 아니면 제가 잘못하고 있습니까?

+0

잎 만들기에 사용하는 코드를 표시 할 수 있습니까? – Kerooker

답변

0

첫 번째 질문 : new ItemStack (Material.LEAVES_2,1, (short) 0); 새 ItemStack (Material.LEAVES_2,1, (short) 1); 나뭇잎의 생성자는 다음과 유사해야합니다.

두 번째 질문 : Shop.getData가 정확히 무엇을 반환합니까?

p.getInventory().addItem(new ItemStack(e.getCurrentItem().getType(),1,e.getCurrentItem().getDurability()));

애프터 값 ':'당신이 그에게 다음을 수행 할 수있는 상점 항목과 유사한 항목을 부여하려면 (그 영어로 불리는 것을 나도 몰라, 나는 독일어 해요)입니다 아이템에 대한 내구성이라고 불리우며 블록 용 데이터라고합니다. 또한 내구성을 위해 Bukkit은 short를 사용하지만 블록 데이터의 경우 바이트를 사용합니다.

+0

Bukkit은 내구성을 위해 Short를 사용하고 Blocks에는 바이트를 사용한다는 점을 지적 해주었습니다. –