2016-07-09 23 views
3

Ich bin gerade dabei, meinen eigenen GUI-Shop für mein Server-Netzwerk zu programmieren, und ich stehe vor zwei seltsamen Problemen.Bukkit/Spigot: Plugin - Benutzerdefinierte GUI Shopfehler

Das erste Problem ist, wenn ich zwei Blätter mit der Artikel-ID erhalten möge 161 und zwei verschiedenen Meta-IDs (0 und 1) bekomme ich nur eine Meta-ID 2.

Hier zurückgekehrt ist, was ich bekomme in meinem debug, wenn es versucht, die Positionsdaten zu erhalten: Problem 1

und das ist, was ich in meinem Inventar erhalten: Problem 1

Aber es soll dies sein (zum Beispiel): 161/0 oder 161/1

Ich bekomme dieses Item Meta von Spigot/Bukkit selbst, so dass ich es sowieso nicht selbst erwerbe.

Das nächste Problem, das ich habe, ist, dass wann immer ich Wolle kaufen will, es funktioniert nur perfekt bis zum 9. Byte, dann alles über mir nur Orange Wool oder Clay oder Glass jedes Mal zurück.

Das ist, wie ich die Einzelteile bin Anzeige:

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); 
    } 

Diese wird in der GUI korrekt angezeigt, aber wenn ich sie kaufen möchten, habe ich immer Orange Wolle oder Ton oder Glas nach der Cyan-Wolle/Ton/Glas.

Dies ist, wie ich es ihnen geben:

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; 
} 

Dies ist, wie ich die JSONObject hinzufügen:

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); 
} 

Dies ist der Code, der ausgeführt wird, wenn jemand auf ein Element klickt:

@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; 
    } 
} 

Also bitte, vermisse ich etwas oder mache ich etwas falsch?

+0

Können Sie uns den Code zeigen, den Sie zum Erstellen der Blätter verwenden? – Kerooker

Antwort

0

Für die erste Frage: neue ItemStack (Material.LEAVES_2,1, (kurz) 0); new ItemStack (Material.LEAVES_2,1, (kurz) 1); Die Konstruktoren Ihrer Blätter sollten ungefähr so ​​aussehen. Für die zweite Frage: Was gibt Shop.getData genau zurück? Wenn Sie ihm einen Gegenstand ähnlich dem Geschäft Artikel geben wollen Sie folgendes tun können:

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

Der Wert nach dem ‚:‘ (IDK was seine in Englisch genannt, ich bin Deutsch) ist genannt Haltbarkeit für Gegenstände, und heißt Daten für Blöcke. Auch für die Haltbarkeit verwendet Bukkit einen kurzen, aber für einen Block Daten verwenden sie ein Byte.

+0

Gute Arbeit für den Hinweis, dass Bukkit Short für Haltbarkeit und Bytes für Blöcke verwendet –