• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

Item und Verzauberungen herausfinden?

LegitCoreYT

Kuhfänger
Registriert
20 August 2016
Beiträge
56
Alter
23
Diamanten
250
Minecraft
NochNichtGebannt
Hey! :)
Ich versuche aktuell zu überprüfen, ob ein Spieler ein Item im Inventar hat und dieses bestimmte Verzauberungen hat. Nur leider bekomme ich es nicht hin ^^
Könnte mir vielleicht jemand bei meinem Problem weiterhelfen?
MfG LegitCore
 

LegitCoreYT

Kuhfänger
Registriert
20 August 2016
Beiträge
56
Alter
23
Diamanten
250
Minecraft
NochNichtGebannt
@jensIO
Erstmal denke für deine Antwort.
Und mal zu Ansatz...
Den hier:

if (e.getCurrentItem().getType().equals(Material.ENCHANTED_BOOK)
&& e.getCurrentItem().getItemMeta().getDisplayName().equals("§bRückstoß I")) {
if (p.getLevel() >= 15) {
if (p.getInventory().contains(Material.STONE_SWORD)) {
p.getInventory().remove(Material.STONE_SWORD);

Aber ich habe bis jetzt nicht herausgefunden, wie ich die Verzauberung bekomme. Das Item geht jetzt :) (Also es zu "finden")
 

LegitCoreYT

Kuhfänger
Registriert
20 August 2016
Beiträge
56
Alter
23
Diamanten
250
Minecraft
NochNichtGebannt
Danke für deine Antwort.

Das Problem dabei ist nur, dass ich nicht weiß, wo ich diese anwenden soll. Nach meiner aktuellen Erkenntnis müsste ich die if Abfrage umschreiben. Meinen Ansatz sieht man ja oben... und dort kann man die Methode nicht verwenden. Gibt es denn noch einen anderen Weg, um dieses Item zu "finden"?
 

Malte

Ehemaliges Teammitglied
Ehem. Teammitglied
Registriert
17 März 2012
Beiträge
524
Diamanten
310
Minecraft
Lergin_
Hier wäre sonst noch der Ansatz für Sponge:

Code:
ItemStack itemStack;

Optional<List<ItemEnchantment>> optional = itemStack.get(Keys.ITEM_ENCHANTMENTS);

if(!optional.isEmpty()) {
    List<ItemEnchantment> enchantments = optional.get();
}
 

LegitCoreYT

Kuhfänger
Registriert
20 August 2016
Beiträge
56
Alter
23
Diamanten
250
Minecraft
NochNichtGebannt
Okay. Das ganze Problem ist jetzt gelöst. Wenn der Spieler das Item verzaubert, füge ich ihn zu einer ArrayList hinzu. Wenn er anschließend das Item nochmal verzaubern will, frage ich ab, ob er in dieser ArrayList ist und wenn nicht, darf er es verzaubern.

MfG LegitCore :)

//Gelöst
 

PSandro

Kuhfänger
Registriert
7 November 2016
Beiträge
51
Diamanten
302
Okay. Das ganze Problem ist jetzt gelöst. Wenn der Spieler das Item verzaubert, füge ich ihn zu einer ArrayList hinzu. Wenn er anschließend das Item nochmal verzaubern will, frage ich ab, ob er in dieser ArrayList ist und wenn nicht, darf er es verzaubern.
Sorry Dir das so grob sagen zu müssen, aber das ist eine extrem schlechte Idee. Nur mal angenommen der Server lädt neu wie @EchtJetzt schon gesagt hat, ist deine Liste und die damit verbundene Funktion weg... und fang jetzt bitte nicht mit Serialisieren oder so einem Kram an, wenn Bukkit bereits passende Schnittstellen bietet.

Im Grunde genommen hast du schon richtig gedacht:
1. "ob ein Spieler ein Item im Inventar hat"
2. "dieses bestimmte Verzauberungen hat"

Das einzige was du machen musst, ist das zu übersetzen:

1. durch die Items des Inventory iterieren
2. die Enchantments des iterierten Items vergleichen

Code:
        final Inventory inventory = null;
        final Enchantment keyEnchantment = Enchantment.DURABILITY;

        final Stream<ItemStack> itemStackStream = StreamSupport.stream(inventory.spliterator(), false);
        final Optional<ItemStack> firstItem = itemStackStream.filter(item -> item.getEnchantments().containsKey(keyEnchantment)).findFirst();
 
Zuletzt bearbeitet:

LegitCoreYT

Kuhfänger
Registriert
20 August 2016
Beiträge
56
Alter
23
Diamanten
250
Minecraft
NochNichtGebannt
Tut mit Leid, dass die Antwort so spät kommt.
Nun mal zu @EchtJetzt ^^
Aber du weißt schon das die ArrayList nach nem Neustart wieder leer ist?
Das ist im Prinzip egal, da es immer nach einen Tod/Reconnect zurückgesetzt wird. (Der Spieler wird aus der ArrayList entfernt)

@PrimitiverTyp
Sorry Dir das so grob sagen zu müssen, aber das ist eine extrem schlechte Idee. Nur mal angenommen der Server lädt neu wie @EchtJetzt schon gesagt hat, ist deine Liste und die damit verbundene Funktion weg... und fang jetzt bitte nicht mit Serialisieren oder so einem Kram an, wenn Bukkit bereits passende Schnittstellen bietet.

Im Grunde genommen hast du schon richtig gedacht:
1. "ob ein Spieler ein Item im Inventar hat"
2. "dieses bestimmte Verzauberungen hat"

Das einzige was du machen musst, ist das zu übersetzen:

1. durch die Items des Inventory iterieren
2. die Enchantments des iterierten Items vergleichen

Code:
        final Inventory inventory = null;
        final Enchantment keyEnchantment = Enchantment.DURABILITY;

        final Stream<ItemStack> itemStackStream = StreamSupport.stream(inventory.spliterator(), false);
        final Optional<ItemStack> firstItem = itemStackStream.filter(item -> item.getEnchantments().containsKey(keyEnchantment)).findFirst();
Vielen Dank für deine Antwort. Ich werde mal morgen deine Möglichkeit ausprobieren.

MfG LegitCore
 
Oben