InventoryClickEvent player Lottery

  • hallo,

    Ich habe mal eine frage undzwar möchte ich in einem inv zb so wie ne lottery das man nur 5 öffnen kann und nicht alle wen es geht mit einer HashMap<Player,Integer>


    Als beispiel Code

    Mit freundliche Grüßen

  • Code
    1. private HashMap<Player, List<Integer>> slots = new HashMap<Player, List<Integer>>();
    2. slots.put(SPIELER, new ArrayList<Integer>()); // Spieler zur Map hinzufügen
    3. slots.get(SPIELER).size() ; // Größe der Liste vom Spieler anzeigen, damit du z.B auf 5 züge begrenzen kannst
    4. slots.get(SPIELER).contains(NUMMER) // Fragen ob der Slot schon angeklickt wurde
    5. slots.containsKey(SPIELER) // Fragen ob der Spieler schon in der Map registriert ist
    6. slots.remove(SPIELER) // Liste des Spielers entfernen, wenn er das Inventar schließt, quittet und co.


    lg Lucas

  • okay lucas hatte es grade getestet bin bloß grade nicht weitergekommen und zwar wie ich es z.b. wie bei einem int +=1 machen kann das wenn der spieler klickt eins hinzugefügt wird mit nem int geht das auch soweit aber halt bei der hasMap komm ich nicht weiter

  • okay lucas hatte jetzt mal rumprobiert aber komme da jetzt nicht weiter wie du das meintest

    könntest du vielleicht mal das mit meinem beispielcode denn ich oben gezeigt habe mir das zeigen wie du es meintest mit dem hinzufügen


    lg DragonS

  • Hey DragonS,


    ich kann weiter aufs Detail eingehen, aber ich werde deinen Code nicht erweitern.
    Ich möchte dir gerne zeigen wie du es schaffst dein Ziel zu verfolgen aber ich möchte,
    dass du es versteht und nicht einfach kopierst.


    Also nach dieser Zeile in deinem Code:

    Code
    1. if (e.getCurrentItem().getType() == Material.ENDER_CHEST) {


    Fragst du einfach ob ob die HashMap den Spieler als Key beinhaltet. ( slots.containsKey(SPIELER) )
    Wenn nicht setzt du einfach einen Eintrag für den Spieler. ( slots.put(SPIELER, new ArrayList<Integer>()) )
    Jetzt fragst du ab ob die größe der Liste größer als 5 ist. ( slots.get(SPIELER).size() >= 5)

    Wenn ja brichst du ab diesem Moment ab und schickst dem Spieler voher eine Nachricht. (Da er bereits 5 Slots angeklickt hat)

    Wenn nicht, dann kannst du einfach den Slot in die Liste hinzufügen und deinen Code ausführen lassen. ( slots.get(SPIELER).add(SLOT) )

    Zum schluss oder beim schließen des Inventar / verlassen des Servers solltest du den Eintrag löschen. ( slots.remove(SPIELER) )


    In deinem Fall bräuchtest du eigendlich keine Liste, ein Integer würde reichen.
    Falls du aber irgendwann einmal dein Plugin erweitern solltest, kann dir das vlt einen Vorteil beschaffen.


    Also noch einmal zum Verständnis:
    Jeder Spieler (Key) bekommt eine eigene Liste die Integer enthält (Value).
    Beim anklicken eines Slots fügst du nun einfach in die Liste des jeweilen Spieler den Slot als Nummer hinzu.
    Voher kannst du so dann ganz bequem abfragen, wie groß die Liste vom Spieler ist was dir angibt, wieviele Slots der
    Spieler schon angeklickt hat.


    Ich hoffe ich konnte dir helfen

    lg Lucas