Gelöst Rerport system -- Nachricht an alle mit rechte senden.

Dieses Thema im Forum "Programmierung" wurde erstellt von ZockerBoysHD, 10. Oktober 2016.

  1. ZockerBoysHD
    Offline

    ZockerBoysHD

    Registriert seit:
    15. August 2014
    Beiträge:
    44
    Minecraft:
    ZockerBoysHD
    Halöle.

    Ich ahbe mich gerade ebend an ein report system für meinem server gesetzt.

    Soweit funktioniert auch alles, nur wenn ich z.b.: /report ZockerBoysHD 1 mache also Grund 1= Hacks dann bekommt man als mod keine anchricht, obwohl alles eig. richtig sein dürfte.

    Die Klasse:
    http://pastebin.com/wPxCj7Pw
     
    #1
  2. LeokoDev
    Offline

    LeokoDev

    Registriert seit:
    18. September 2016
    Beiträge:
    17
    Minecraft:
    Leoko
    Da sind n paar Sachen n bissel falsch gelaufen:

    Line 41:
    if(args.length == 1)
    zu
    if(args.length == 2)
    Da /report NAME GRUND ja 2 argumente hat

    Line 42:
    if(args[0].matches(Bukkit.getOnlinePlayers().toString()))
    zu
    if(Bukkit.getOfflinePlayer(args[0]).isOnline())

    Line 43
    if(args[1].matches("1") || args[1].matches("2") || args[1].matches("3") || args[1].matches("4"))
    kannst du ganz simpel machen mit (ist aber nicht falsch)
    if(args[1].matches("1-4"))

    und ganz neben bei wenn du zwei Strings vergleichen will nimmt man eig. .equals("str") und nicht .matches("str") weil matches mit Regex arbeitet und equals einfach nur die Strings vergleicht.
    Und wenn du .equalsIgnoreCase("str") nimmst wird Groß- und Kleinschreibung ignoriert.

    Das würde man zB in line 24 machen
    if(args[0].matches("reasons"))
    zu
    if(args[0].equalsIgnoreCase("reasons"))
     
    #2
  3. ZockerBoysHD
    Offline

    ZockerBoysHD

    Registriert seit:
    15. August 2014
    Beiträge:
    44
    Minecraft:
    ZockerBoysHD
    Habe es jetzt so geamcht. Funzt abebr imemrnochnicht... Und es komtm KEIN error. nichts
     
    #3
  4. LeokoDev
    Offline

    LeokoDev

    Registriert seit:
    18. September 2016
    Beiträge:
    17
    Minecraft:
    Leoko
    Poste pls nochmal deinen ganzen Code, so wie er jz ist und beschreb mal genau was passiert wenn man /report NAME 1 macht
     
    #4
  5. ZockerBoysHD
    Offline

    ZockerBoysHD

    Registriert seit:
    15. August 2014
    Beiträge:
    44
    Minecraft:
    ZockerBoysHD
    eeeeh hier: http://pastebin.com/mSePskC9

    Es passiert nichts, wenn man das macht. nochnichtmal wird die nachricht, dass man den reportet hat ausgegeben...
    Die klasse ist abebr importiert
     
    #5
  6. LeokoDev
    Offline

    LeokoDev

    Registriert seit:
    18. September 2016
    Beiträge:
    17
    Minecraft:
    Leoko
    Schick mal deine onEnable() Methode wo du den command registrierst
     
    #6
  7. ZockerBoysHD
    Offline

    ZockerBoysHD

    Registriert seit:
    15. August 2014
    Beiträge:
    44
    Minecraft:
    ZockerBoysHD
    Bitte:
    http://pastebin.com/fDBuYqhb
    Habe da wos genau ist mit // makiert
     
    #7
  8. LeokoDev
    Offline

    LeokoDev

    Registriert seit:
    18. September 2016
    Beiträge:
    17
    Minecraft:
    Leoko
    Oke das sieht so gut aus
    1. Gehen die anderen Commands?
    2. hast du den command in der plugin.yml registriert?
    3. funkt /report reasons?
    4. Mach vllt. noch mehr else-Statements
    wie in line 73 bei http://pastebin.com/mSePskC9:
    }else p.sendMessage("§cDer User muss online sein um ihn zu reporten!");
    dann siehst du vllt wieso der code nicht ausgeführt wird.
     
    #8
  9. ZockerBoysHD
    Offline

    ZockerBoysHD

    Registriert seit:
    15. August 2014
    Beiträge:
    44
    Minecraft:
    ZockerBoysHD
    1.Ja
    2.Ja
    3. Ja
    4. oke :D
     
    #9
  10. jensIO
    Offline

    jensIO

    Registriert seit:
    28. Juli 2015
    Beiträge:
    602
    Ort:
    Internet, im Neuland
    Minecraft:
    jens1o
    Du hast hier einen kleinen Fehler, da du die 2. If-Abfrage(wegen deinem wiederlichem Codestil...) in die erste verschachtelt hast, was nie erreicht werden kann.

    Mal in schön. Das dicke Zeichen fehlt bei dir:
    Code (Text):
    1.  
    2. if (args.length === 1) {
    3.     if (args[0].equalsIgnoreCase("reasons")) {
    4.         p.sendMessage("§e========> §8Report Gründe §e<========");
    5.         p.sendMessage("§8             Gründe             |      Bestrafung    ");
    6.         p.sendMessage("§8-----------------------------------------------------");
    7.         p.sendMessage("§81.: §7Hacking/Hackclient        |   20 Tage Bann -> 30 Tage -> Permanent ");
    8.         p.sendMessage("§82.: §7Werbung                   |   Kick -> 24h Mute -> 1 Tag -> 5 Tage ");
    9.         p.sendMessage("§83.: §7Spamming                  |   Kick -> 2 Tage Mute -> 1 Tag Bann -> Permanenten Bann");
    10.         p.sendMessage("§84.: §7Beleidigungen             |   2h Mute -> 8h Mute -> 1 Tag Bann");
    11.         p.sendMessage("§e=================><=================");
    12.     } else {    
    13.         p.sendMessage(KilltimeMain.prausrufe + "§8/report §cNAME §bZAHL DES GRUNDES");
    14.         p.sendMessage(KilltimeMain.prausrufe + "Du Brauchst eine Liste alle Gründe? §b/report reasons");
    15.     }        
    16. } <== Dieses fehlt
    Ansonsten kann die dritte If-Abfrage [if (args.length == 2)] nie erreicht werden, weil ja die Argumente nicht gleichzeitig aus einem bestehen UND aus zwei sein können.

    Daran sieht man mal, wie wichtig ordentlich strukturierter Code ist.

    // cc: Verschraubt

    Kleiner Tipp abseits davon:

    Der Ausführer des Commands kann auch bspw. die Console sein, bei dir würde das dann jetzt crashen. Nimm einfach statt Player die CommandSender Klasse, die verfügt auch über die Methode: ```CommandSender#sendMessage(string msg)```

    Edit: Ups, das ist hier ja kein GitHub... :D
     
    #10
    ZockerBoysHD gefällt das.
  11. ZockerBoysHD
    Offline

    ZockerBoysHD

    Registriert seit:
    15. August 2014
    Beiträge:
    44
    Minecraft:
    ZockerBoysHD
    Ich habe es zwar nochnicht ausprobiert, abber es klingt, als ob es jz funken würde...

    Ich nehme eig. nur den sender weil ich den spielr auch brauhcen weder, da ich auch noch nicht alle featueres im report system drin habe. da sollen auch z.b. noch andere sachen passieren usw. und why sollte die Konsole einen Reporten?!? die kann odhc garnicht überfprüfen ob jmd hackt? xD
     
    #11
  12. ZockerBoysHD
    Offline

    ZockerBoysHD

    Registriert seit:
    15. August 2014
    Beiträge:
    44
    Minecraft:
    ZockerBoysHD
    Nice!
    Bisher als ich es alleine getestet habe, komtm schonmal soweit, bis da, wo der user geprüft wird ob er online ist!
    ES GEHT!!!!! DANKE!!!!!!!!!!
    :D

    Und. Ich ahbe das so freikopf soweit programmeirt... :O
    wusste garnicht, dass ich sowas kann :D
    Danke wegen den fixes^^
     
    #12
  13. TheSimufreak
    Offline

    TheSimufreak

    Registriert seit:
    28. Juni 2012
    Beiträge:
    42
    Noch nen kleinen Tipp für deine Hauptklasse:
    In Zeile 128 bzw. 129 hast du

    Code (Text):
    1.  
    2. getCommand("help").setExecutor(new help());
    3. getCommand("hilfe").setExecutor(new help());
    4.  
    Da würde ich dir raten mit Aliasen in der plugin.yml Datei zu arbeiten.
    Auch empfehle ich dir in Zukunft eine bessere Namensgebung zu nutzen, bei Klassen, Methoden als auch Variablen. Dazu gibt es eine sehr häufig genutzte Konvention. Mal davon abgesehen dass du die Hauptklasse aus einem anderen Projekt (bei dem ich dir bei der Fehlersuche helfen wollte) übernommen hast, was auch die nichtssagenden Methodenname erklären würde.
    Und bevor ich's vergesse, les dir bitte deine Beträge noch einmal durch bevor du sie abschickst, du scheinst da nämlich eine Schwäche für Rechtschreibfehler zu haben...
     
    #13
  14. ZockerBoysHD
    Offline

    ZockerBoysHD

    Registriert seit:
    15. August 2014
    Beiträge:
    44
    Minecraft:
    ZockerBoysHD
    Ja. Das Stimmt. Ich kopiere oft einfach die main, damit ich das pl shcneller fertig bekomme :D

    Und ds mit den fehlern, kommt davon, weil ich sehr schnell tippe.
     
    #14
  15. TheSimufreak
    Offline

    TheSimufreak

    Registriert seit:
    28. Juni 2012
    Beiträge:
    42
    Und du bist nicht der Meinung dass du die Fehler umgehen könntest wenn du dir beim 'Programmieren' die nötige Zeit lässt und nicht (schier) wahllos bereits vermurksten Code kopierst?! (Qualität > Quantität)
    Sorry für den Sarkasmus, aber mit
    hat @jensIO absolut recht.
     
    #15
    jensIO gefällt das.
  16. ZockerBoysHD
    Offline

    ZockerBoysHD

    Registriert seit:
    15. August 2014
    Beiträge:
    44
    Minecraft:
    ZockerBoysHD

    SAGMAL WAS WILLST DU EIG: VON MIR:
    DAS IST DOCH MINE SAHCE; WIE ICH PROGRAMMIERE; ODER DAS DA "AUSSEHEN" LASSE.
    ICH MECKER JA AUCH NICHT; NUR WEIL DU MORGENS MIT DEM LINKEN ANSTATT RECHTEM FUS AUFGESTANDEN BIST:
    ODER WEIL DU DEIN PC NICHT MIT DER RECHTEN HAND SONDERN MIT DER LINKEN HAND ANGEMACHT HAST:

    ALSO WAS WILLT DU
     
    #16
  17. TheSimufreak
    Offline

    TheSimufreak

    Registriert seit:
    28. Juni 2012
    Beiträge:
    42
    Sorry für die aggressive Haltung, manchmal muss man dem einen oder anderen mal die Meinung geigen. Ob das gerechtfertigt ist oder nicht sei dahin gestellt, sowas solltest du nie persönlich nehmen. Dennoch solltest du dir die Ratschläge zu Herzen nehmen (oder zumindest das was du für sinnvoll hältst). Deine Quellcode ist nicht das, was man als guten Programmierstil bezeichnen würde. Ob dir das jetzt wichtig ist, ist deine Angelegenheit, da hast du vollkommen recht.
    Wenn du selber das Ziel verfolgst deine Programmierfähigkeiten auszubauen ist es ratsam, sich an die allgemeine Konvention zu halten.

    Auch wenn es dir jetzt lächerlich erscheint die Namen deiner Instanzen nach einem vorgegeben Scheme zu wählen, bringt dieser Standard eine Menge Vorteile: So kann jeder auf einen Blick anhand des Namens erkennen wobei es sich bei einer Variable handelt oder was für einen Zweck eine Methode erfüllt. Das ist nicht nur für dich übersichtlicher sondern auch für andere Programmierer, denen du deinen Quellcode z.B. in einem Forum wie diesem präsentierst. Auch die Formatierung (z.B. Einrückungen) spielt hier eine Rollte, die bei dir aber recht vernünftig ausschaut.

    Ich mache mir im Folgenden mal die Mühe deine Code zu kommentieren. Ich will dich damit nicht angreifen sonder dir konstruktive Ratschläge geben, wie du deine Programme in Zukunft besser gestalten kannst:

    Deine Mainklasse:
    - die hast du offensichtlich Kopiert, ist beim Programmieren ein absolutes no-go
    - entsprechend ist der Name irreführend, aber zumindest heißt die nicht Main :D
    -
    die Main implementiert das Interface Listener, obwohl du die Events (korrekterweise) ausgelagert hast
    - Für die Config-Files ist eine eigene Klasse ebenfalls sinnvoller
    - genau wie für die Listen/Maps, Scoreboard und die Prefixe von Zeile 66-69
    - lobenswert ist, dass du für das Registrieren von Commands und den Listenern eigene Methoden geschrieben hast
    - auch wenn die Namen createConfig() und createSConfig() ungünstig gewählt sind; createConfig() und createSpawnConfig() wären angebrachter und gehören ebenfalls in die separate Config-Klasse
    - und für die Listener sowie die Commands zwei eigene Methoden besser wären


    Deine Report-Command-klasse
    - Klassenname sollten groß geschrieben werden, will an dieser Stelle aber nicht genauer drauf eingehen (s.O.)
    - das Senden der 'Informationstabelle' geschieht bei dir Zeilenweise. Hier solltest du (meiner Meinung nach) alles in einen String packen und mit \n arbeiten
    - du gibst diese Tabelle mehrfach an, obwohl du hier Redundanzen recht einfach vermeiden könntest indem du den String in einer Variable oder in einer eigenen Klasse speicherst.
    - bei Bukkit/Spigot empfiehlt es sich die ChatColor Klasse zu nutzen anstatt die Codes direkt anzugeben
    - Umlaute werden nicht immer Korrekt dargestellt, deshalb ist auch hier Vorsicht geboten

    Ich denke, dass der angeschlagene Tonfall u.A. daher rührt, dass viele unerfahrene Programmierer ähnliche Fehler machen, sich dessen nicht bewusst sind und übersehen, dass Programmieren schwerer ist als sie meinen (Stichwort Scriptkiddie, auch wenn der Begriff aus einem etwas anderen Kontext stammt)
     
    #17
    jensIO gefällt das.