You are not logged in.

  • Login
Bitte besucht unser neues Forum unter https://forum.nitrado.net | Please visit our new Forum at https://forum.nitrado.net

Dear visitor, welcome to Nitrado.net Prepaid Gameserver Community-Support - Archiv. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

WaterPvP

User / Kunde

  • "WaterPvP" started this thread

Posts: 11

  • Send private message

1

Thursday, June 11th 2015, 3:25pm

Gestackte Items gehen nicht

Hallo ich benutze für mein Shop-Verkauf-System den Code:
if(p.getInventory().contains(new ItemStack(Material.DIAMOND))){
um abzufragen ob der Spieler ein Diamant im Inventar hat. Es funktioniert aber wenn ich einen Stack Diamanten im Inventar habe dann geht es nicht mehr. Weiß jemand eine andere nicht all zu große Methode?

Mfg, WaterPvP

iSEVEN

User / Kunde

  • "iSEVEN" is male

Posts: 1,431

  • Send private message

2

Thursday, June 11th 2015, 3:31pm

Iteriere durch das Inventar und guck ob der ItemStack nen Diamant ist.

_Lukii

User / Kunde

  • "_Lukii" is male

Posts: 128

  • Send private message

3

Thursday, June 11th 2015, 3:40pm

Mit new ItemStack(Diamond) erstellst du einen ItemStack mit einem Diamanten, soviel ich weiß... Prüft du dann ob im Inventar genau dieser ItemStack vorhanden ist, so ist der ItemStack mot dem 1 Dia nicht das gleiche wie der ItemStack mit 64 Dia, den du hast..

Wie iSeven scho geschrieben hat; es wäre am sinnvollsten, eine for-Schleife zu verwenden.

Jetzt mal am Handy geschrieben:

Source code

1
2
3
4
5
for (int i = 1; i <= p.getInventory().length(); i++){
}
//Oder
for (ItemStack i : p.getInventory().getContents()){
}

@Anno35 Danke für den Hinweis auf getContents() :)
Ob es genau .length und .getContain heißt, weiß ich gerade nicht, es gibt sie jedenfalls ;)

This post has been edited 1 times, last edit by "_Lukii" (Jun 11th 2015, 6:12pm)


WaterPvP

User / Kunde

  • "WaterPvP" started this thread

Posts: 11

  • Send private message

4

Thursday, June 11th 2015, 4:32pm

Geht der Code auch etwas genauer? Also wie Frage ich jetzt ab ob ich Diamanten suche?

Anno35

User / Kunde

Posts: 1,223

Thanks: 3

  • Send private message

5

Thursday, June 11th 2015, 4:33pm

Was @_Lukii meint ist Inventory.getContents()
Und zum überprüfen des Itemstacks würde ich bei dem erstellen ItemStack .isSimilar(ItemStack aus Inv) nehmen.

WaterPvP

User / Kunde

  • "WaterPvP" started this thread

Posts: 11

  • Send private message

6

Thursday, June 11th 2015, 4:55pm

Ein ganzer Code wäre hilfreicher :3

Anno35

User / Kunde

Posts: 1,223

Thanks: 3

  • Send private message

7

Thursday, June 11th 2015, 5:00pm

Source code

1
2
3
4
5
6
7
ItemStack item = //Dein Item
for(ItemStack content : Inventory.getContents()) {
if(content == null || content.getType == Material.AIR) continue;
if(content.isSimilar(item)) {
//Mach was
}
}

Eine for-Schleife solltest du als Grundlage beherschen.

WaterPvP

User / Kunde

  • "WaterPvP" started this thread

Posts: 11

  • Send private message

8

Thursday, June 11th 2015, 5:29pm

Funktioniert aber nicht. Da steht : Cannot make a static reference to non-static method getConfig() from the type Inventory

Anno35

User / Kunde

Posts: 1,223

Thanks: 3

  • Send private message

9

Thursday, June 11th 2015, 5:31pm

Du musst das Inventory zu deinem Inventory umändern.
Schick uns mal den kompletten Code, du versuchst in einer static Methode die getConfig() Methode (welche nicht static ist) aufzurufen.

WaterPvP

User / Kunde

  • "WaterPvP" started this thread

Posts: 11

  • Send private message

10

Thursday, June 11th 2015, 5:32pm

} else if(event.getCurrentItem().getType() == Material.EMERALD) {
int punkte = plugin.getConfig().getInt("Spieler." + p.getName() + ".Punkte");
ItemStack item = new ItemStack(Material.EMERALD);
for(ItemStack content : Inventory.getContents()){
if(content == null || content.getType() == Material.AIR) continue;
if(content.isSimilar(item)) {
punkte = punkte + 50;
plugin.getConfig().set("Spieler." + p.getName() + ".Punkte", punkte);
plugin.saveConfig();
p.getInventory().removeItem(new ItemStack(Material.EMERALD, 1));
p.sendMessage("§3Shop§8» §aDu hast erfolgreich ein §6EMERALD §averkauft!");
} else {
if(!p.getInventory().contains(new ItemStack(Material.EMERALD))){
p.sendMessage("§3Shop§8» §cIn deinem Inventar befindet sich kein §eEMERALD§c!");
p.closeInventory();

Anno35

User / Kunde

Posts: 1,223

Thanks: 3

  • Send private message

11

Thursday, June 11th 2015, 5:37pm

Wie gesagt, Inventory zu p.getInventory() ändern.

Bitte besucht unser neues Forum unter https://forum.nitrado.net| Please visit our new Forum at https://forum.nitrado.net