SchmidiMC Posted March 19, 2017 Share Posted March 19, 2017 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 to comment Share on other sites More sharing options...
Baustein Posted March 19, 2017 Share Posted March 19, 2017 BlockBreakEvent FoodLevel überprüfen, entsprechend das event canceln oder nicht. Liebe Grüße, Baustein Link to comment Share on other sites More sharing options...
SchmidiMC Posted March 19, 2017 Author Share Posted March 19, 2017 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 to comment Share on other sites More sharing options...
Baustein Posted March 19, 2017 Share Posted March 19, 2017 eine deiner Klassen muss Listener implementieren (class Merkel implements Listener) in dieser Klasse kannst du einen EventHandler mit der Annotation @EventHandler einleiten den Handler musst du in der onEnable registrieren: getServer().getPluginManager().registerEvents(new Merkel(), this); Liebe Grüße, Baustein Link to comment Share on other sites More sharing options...
SchmidiMC Posted March 19, 2017 Author Share Posted March 19, 2017 Das habe ich bisher: http://prntscr.com/elw0wd Ich weiß da fehlt viel und es sind noch Fehler da 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 to comment Share on other sites More sharing options...
Baustein Posted March 19, 2017 Share Posted March 19, 2017 Gib dem BlockBreakEvent einen Namen. Beispielsweise BlockBreakEvent event oder BlockBreakEvent e p.getFoodLevel passt. Nutze aber lieber if (p.getFoodLevel() <= 6) e.setCancelled(true) statt p.blockbreak = false Liebe Grüße, Baustein Link to comment Share on other sites More sharing options...
SchmidiMC Posted March 19, 2017 Author Share Posted March 19, 2017 Danke für den Hinweis, würde das jetzt so passen? http://prntscr.com/elxybx Und was ist an dem getPlayer falsch? Also muss ich da eine extra Methode erstellen? Und erstmal nochmals vielen Dank für deine Hilfe Link to comment Share on other sites More sharing options...
Baustein Posted March 20, 2017 Share Posted March 20, 2017 Weil du versuchst, von "event" den Player herauszufinden, dabei heißt dein Event "e", weil du es oben so genannt hast. Erneut empfehle ich, nochmal über die Java-Grundlagen zu schauen Liebe Grüße, Baustein Link to comment Share on other sites More sharing options...
SchmidiMC Posted March 20, 2017 Author Share Posted March 20, 2017 Du hab einen Fehler beim Laden vom Plugin. Findet die Main Klasse nicht, hier eine genaue Beschreibung vom Fehler: https://hastebin.com/nebuwevipo.vbs Link to comment Share on other sites More sharing options...
Baustein Posted March 20, 2017 Share Posted March 20, 2017 Deine Main-Klasse kann nicht gefunden werden. exportiert? richtiger Pfad in der plugin.yml? Main-Klasse extends JavaPlugin? Liebe Grüße, Baustein Link to comment Share on other sites More sharing options...
SchmidiMC Posted March 20, 2017 Author Share Posted March 20, 2017 Expotiert habe ich, also halt das komplette Plugin wie es halt gemacht wird 2. Pfad in Plugin.yml müsste stimmen: main: de.schmidi.antiafk.Main 3. https://hastebin.com/kaluzeyapa.scala müsste eig stimmen (denke ich) Link to comment Share on other sites More sharing options...
Baustein Posted March 20, 2017 Share Posted March 20, 2017 Dein Pfad in der .yml ist nicht richtig. de.schmidi.antiafk.main.Main Liebe Grüße, Baustein Link to comment Share on other sites More sharing options...
SchmidiMC Posted March 20, 2017 Author Share Posted March 20, 2017 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 to comment Share on other sites More sharing options...
SchmidiMC Posted March 20, 2017 Author Share Posted March 20, 2017 bzw funkt. das Plugin auch nicht ganz, ich hab zwar grade 5,5 Hunger keulen also Foodlevel 5 kann denoch blöcke abbauen Link to comment Share on other sites More sharing options...
BloodSKreaper Posted March 20, 2017 Share Posted March 20, 2017 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 to comment Share on other sites More sharing options...
Baustein Posted March 20, 2017 Share Posted March 20, 2017 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? EventHandler BlockBreakEvent HashMap<String, Integer> in der du Spielername / UUID und Block-Anzahl speicherst 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 to comment Share on other sites More sharing options...
SchmidiMC Posted March 20, 2017 Author Share Posted March 20, 2017 (edited) Ich probiers mal aus Freundliche Grüße Schmidi Edited March 20, 2017 by SchmidiMC Link to comment Share on other sites More sharing options...
SchmidiMC Posted March 20, 2017 Author Share Posted March 20, 2017 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 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 to comment Share on other sites More sharing options...
Baustein Posted March 20, 2017 Share Posted March 20, 2017 event.getPlayer() wird noch immer nicht funktionieren. Fix das mal. 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. 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 to comment Share on other sites More sharing options...
SchmidiMC Posted March 20, 2017 Author Share Posted March 20, 2017 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 to comment Share on other sites More sharing options...
Joey Posted March 20, 2017 Share Posted March 20, 2017 Wenn du dein BlockBreakEvent mit "e" benennst, musst das auch beibehalten Versuche mal e.getPlayer Mfg, Joey Link to comment Share on other sites More sharing options...
SchmidiMC Posted March 20, 2017 Author Share Posted March 20, 2017 ah, danke für den Hinweis Wie muss ich mit dem Rest fortfahren? MFG Schmidi Link to comment Share on other sites More sharing options...
BloodSKreaper Posted March 20, 2017 Share Posted March 20, 2017 vor 3 Stunden schrieb SchmidiMC: Wie muss ich mit dem Rest fortfahren? Wie weit bist du denn und was willst du noch machen? Freundliche Grüße BloodSKreaper Link to comment Share on other sites More sharing options...
SchmidiMC Posted March 21, 2017 Author Share Posted March 21, 2017 Bin gerade soweit: https://hastebin.com/uqaxiyokes.java Weiß nur nicht wie ich die Hashmap noch richtig hinbekomme und ob ich nochwas brauche damit das Plugin seinen Zweck erfüllt. Mit freundlichen Grüßen Schmidi Link to comment Share on other sites More sharing options...
Joey Posted March 21, 2017 Share Posted March 21, 2017 @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 to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now