Jump to content

AntiAFK Plugin


Empfohlene Beiträge

Hallo,

Wollte Anfang programmieren zu lernen/ zu üben. Da ich auf einem Skyblock Server Supporter bin und diesen noch mehr unterstützen wollte, wollte ich ein AntiAFK Plugin schreiben da ja viele AFK Farmen.

Ich weiß nur leider nicht genau wie ich das schreiben muss. 

Das Plugin soll wie gefolgt funktionieren: Wenn ein Spieler 3 oder weniger Hungerkeulen hat soll er keine Blöcke mehr abbauen dürfen.

Würde mich freuen über schnelle Unterstützung :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke erstmal für deine Hilfe.

Was ich noch wissen wollte war wo ich das Event schreiben muss?

Bei Commands gibt es ja ein eigenes Package und Klasse dafür, muss ich das beim Event auch machen? Und wenn ja wie verbinde ich das dann zur Main Klasse?

Link zu diesem Kommentar
Auf anderen Seiten teilen

  1. eine deiner Klassen muss Listener implementieren (class Merkel implements Listener)
  2. in dieser Klasse kannst du einen EventHandler mit der Annotation @EventHandler einleiten
  3. den Handler musst du in der onEnable registrieren: getServer().getPluginManager().registerEvents(new Merkel(), this);

 

Liebe Grüße,
Baustein

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das habe ich bisher: http://prntscr.com/elw0wd

Ich weiß da fehlt viel und es sind noch Fehler da :D Habe deshalb auch noch Fragen (und tut mir leid aber fange gerade erst seit gestern damit an)

Problem: Der Zeigt mir einen Fehler an das die Klammer nach Listener nicht komplett ist also die andere fehlt die obwohl die da ist.

Frage: Wie muss ich das mit dem Blockbreak aufschreiben? und mit dem überprüfen nach dem Hunger Level passt da getFoodlevel? Denn setFoodlevel ist es ja auf keinen Fall oder gibts dafür noch ne andere Methode?

Und danke erstmal für deine Hilfe Baustein :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

  1. Gib dem BlockBreakEvent einen Namen. Beispielsweise BlockBreakEvent event oder BlockBreakEvent e
  2. p.getFoodLevel passt. Nutze aber lieber if (p.getFoodLevel() <= 6)
  3. e.setCancelled(true) statt p.blockbreak = false

 

Liebe Grüße,
Baustein

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wollte noch fragen, verliert man kleine Hungerkeulen beim abbauen von Blöcken? Egal welche Schwierigkeitsstufe?

Wenn nicht, gibts dafür iwi eine andere Einstellung/ Plugin/ oder wie kann ich das selber in mein Plugin inigrieren das wenn jemand z.B. nach 100 blöcken eine halbe Hungerkeule verliert?

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 5 Minuten schrieb SchmidiMC:

bzw funkt. das Plugin auch nicht ganz, ich hab zwar grade 5,5 Hunger keulen also Foodlevel 5 kann denoch blöcke abbauen

Ich gehe mal davon aus, dass das beim Hunger genauso ist wie mim Leben. Hier stellen 10Herzen 20Healthpoints dar. Wahrscheinlich sind also deine 5,5 Hungerbalken 11Hungerpoints.

 

Versuch das mal anzuwenden und schreib dein Ergebnis am besten hier ;)

 

Freundliche Grüße

BloodSKreaper

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 13 Minuten schrieb SchmidiMC:

Wenn nicht, gibts dafür iwi eine andere Einstellung/ Plugin/ oder wie kann ich das selber in mein Plugin inigrieren das wenn jemand z.B. nach 100 blöcken eine halbe Hungerkeule verliert?

  1. EventHandler BlockBreakEvent
  2. HashMap<String, Integer> in der du Spielername / UUID und Block-Anzahl speicherst
  3. bei jedem BlockBreak erhöhst du die Zahl für diesen Spieler, chekst, ob sie bspw. >= 100 ist, gleichst entsprechend das FoodLevel an und clearst seinen Eintrag in der HashMap.

 

Liebe Grüße,
Baustein

Link zu diesem Kommentar
Auf anderen Seiten teilen

Bin grad so weit: http://prntscr.com/embstx

Sry das ich der dümmste Mensch der Welt bin, aber ist mein erstes eigenes Plugin was ich versuche zu machen, also bitte verzeiht mir wenn ich nicht alles verstehe :D

Kannst du mir mal bitte sagen wie ich das mit der Hashmap bzw der Blockanzahl schreiben muss? :) 

Und wie ich das prüfen kann das der 100 abgebaut hat?

Danke erstmal für alles bisher,

Mit freundlichen Grüßen

Schmdi :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

  1. event.getPlayer() wird noch immer nicht funktionieren. Fix das mal.
  2. eine HashMap initiierst du mit HashMap<A, B> name = new HashMap<A, B>(); also in diesem Fall HashMap<String, Integer> blockCount = new HashMap<String, Integer>() oder entsprechend ähnlich.
  3. In einer HashMap hat jeder Eintrag einen Schlüssel (Key) und einen dazugehörigen Wert (Value). Key ist oben A (String), Value ist B (Integer).
  4. Mit blockCount.put("Baustein", 57); könntest du für den Spieler "Baustein" die Block-Anzahl 57 speichern.
  5. Mit blockCount.get("Baustein") erhältst du die aktuelle Block-Anzahl von "Baustein".
  6. Nutze die Methoden put() und get(), um im EventHandler den aktuellen Datensatz zu verändern.
  7. Wenn dir die Hunger-Sache so wichtig ist, dass selbst Spieler, die sich ausloggen weitergespeichert werden sollen bzw. zwischenzeitliche Server-Neustarts ermöglichen werden, solltest du statt den Spielernamen die UUIDs nehmen (p.getUniqueId().toString()) und die HashMap in eine Datei speichern.

 

Liebe Grüße,
Baustein

Link zu diesem Kommentar
Auf anderen Seiten teilen

Bin grad so weit :/ https://hastebin.com/wulititivu.java

Tut mir echt leid wenn ich dich damit schon nerve, aber mit was kann ich das event.getPlayer fixen bzw. womit soll ich es ersetzen, denn z.B. Player p = event.e etc. geht ne.

Und stimmt das so wie ich das mit dem blockCount Methoden gemacht hab oder ist das auch falsch?

Link zu diesem Kommentar
Auf anderen Seiten teilen

@Baustein hat dir doch alles erklärt:

 

vor 21 Stunden schrieb Baustein:
  • eine HashMap initiierst du mit HashMap<A, B> name = new HashMap<A, B>(); also in diesem Fall HashMap<String, Integer> blockCount = new HashMap<String, Integer>() oder entsprechend ähnlich.
  • In einer HashMap hat jeder Eintrag einen Schlüssel (Key) und einen dazugehörigen Wert (Value). Key ist oben A (String), Value ist B (Integer).
  • Mit blockCount.put("Baustein", 57); könntest du für den Spieler "Baustein" die Block-Anzahl 57 speichern.
  • Mit blockCount.get("Baustein") erhältst du die aktuelle Block-Anzahl von "Baustein".
  • Nutze die Methoden put() und get(), um im EventHandler den aktuellen Datensatz zu verändern.

 

Vielleicht solltest du dir die Beiträge auch mal durchlesen. Wir helfen dir gerne, allerdings Helfen != Wir schreiben dir den Code, denn das bringt dir nichts.

 

Dazu nochmal eine kleine Anmerkung. Die HashMap deklariert man nicht im EventHandler, dann würdest du ja per abgebautem Block eine HashMap erstellen. Erstell die in deiner main Klasse oder in der Listener Klasse, aber nicht im EventHandler.

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...
B
B