• 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!

Spigot Erledigt PlugIn Brauche Hilfe bei der Programmierung einer CoinAPI

zTrouble

Minecrafter
Mitglied seit
8 September 2019
Beiträge
16
Moin,

Ich arbeite momentan an einer CoinAPI die auch eine addCoins Methode beinhalten soll, mein aktuelles Problem ist es das wenn ich z.B 6 Coins setzen möchte wenn jemand den befehl /addcoins [args] eingibt (dieser ist nur zum Test weshalb er wenig Sinn macht) dann werden am Anfang 6 Coins hinzugefügt (falls der Spieler noch keine Coins hat). Wenn der Spieler jedoch schon einmal 6 Coins bekommen hat dann nicht mehr. Ich möchte das die Coins hinzugefügt werden und NICHT überschrieben also er soll auch 6 Coins bekommen wenn er schon welche hat, ich hab bereits eine getCoins Mehtode geschrieben die zu der Nachricht ausgegeben wird, in der Config und bei der Methoden Ausgabe bleibt es gleich.

AddCoins Methode:
    public static void addCoins(Player p, int anzahl) {
        FileConfiguration  cfg = Main.getinstance().getConfig();
        if(cfg.get(p.getUniqueId() + ".Coins") == null) {
            cfg.set(p.getUniqueId() + ".Coins", 0);
            int i = cfg.getInt(p.getUniqueId() + ".Coins");
            int total  = i + anzahl;
            cfg.set(p.getUniqueId() + ".Coins", total);
            Main.getinstance().saveConfig();
        }
    }
Bei Zeile 7 sollen die Coins dann hinzugefügt werden

AddCoins Command:
    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        Player p = (Player) sender;
        if(args.length == 1) {
            CoinAPI.addCoins(p, 6);
            p.sendMessage("§7Du hast §e§l" + CoinAPI.getCoins(p) + " §7Münzen");
        }
        return false;
       

       
    }

}
Meine Vermutung ist es das keine Coins hinzugefügt sondern gesetzt (also überschrieben) werden.
LG
 

DerFrZocker

Miner
Osterei Experte
Mitglied seit
10 Dezember 2017
Beiträge
153
Alter
19
Minecraft
DerFrZocker
Deine code logik stimmt nicht ganz:
Java:
        if(cfg.get(p.getUniqueId() + ".Coins") == null) {
            cfg.set(p.getUniqueId() + ".Coins", 0);
            int i = cfg.getInt(p.getUniqueId() + ".Coins");
            int total  = i + anzahl;
            cfg.set(p.getUniqueId() + ".Coins", total);
            Main.getinstance().saveConfig();
        }
Dieser ganze code Block wird nur ausgeführt wen der Spieler keine Coins hat. Ich vermude mal das du die klammer Falsche gesetzt hast. Und eigentlich nur wolltest, das dem Spieler wen er keine Coins hat 0 gegeben werden und danach die coins hinzu gefügt werden.
Sprich wenn du die klammer verschiebst sollte es funktionieren.
 

Twitter

Allgemein
Hilfe Benutzer
  • Kroseida Kroseida:
    evtl. macht genau das an der stelle der .NET Compiler nicht?
  • SirYwell SirYwell:
    Java braucht halt nach paar Durchläufen direkt nochmal 200ms weniger
  • SirYwell SirYwell:
    Keine Ahnung wofür du das genau brauchst, aber das kann definitiv ausschlaggebend sein
  • Kroseida Kroseida:
    paar durchläufen? also wenn du es öfter ausführst? oder die schleife mehrfach hintereinander ausfürhst?
  • SirYwell SirYwell:
    Wenn ich deinen Codeblock, der innerhalb der Methode ist, in einer for-Schleife aufrufe
  • Kroseida Kroseida:
    okay, das könnte wirklich noch mal eine optimierung von java sein, das ist halt aber nicht mein Direktes Ziel, will die optimierung möglichst raus lassen.
  • Kroseida Kroseida:
    Weil ich halt auch nicht weiß was genau Java dahinter optimiert
  • SirYwell SirYwell:
    Genauso wie mit einer leeren Schleife, die wird nach 2-3 Aufrufen auch rausoptimiert
  • SirYwell SirYwell:
    Naja wenn du ein Programm schreibst musst du die Optimierung schon auch bedenken
  • Kroseida Kroseida:
    das stimmt, aber da geht leider die vergleichbarkeit verloren
  • Kroseida Kroseida:
    eine for drüber würde sogar noch gehen
  • Kroseida Kroseida:
    mit mehr unterscheiden sich halt auch die implementierungen jeweils
  • SirYwell SirYwell:
    Ne, deswegen macht man normalerweise ja Benchmarks mit Warmup
  • Kroseida Kroseida:
    ich schaue mir das mal noch mal an und gucke ob ich da was einbauen kann
  • SirYwell SirYwell:
    In der Anwendung sind Stellen, die mehr und mehr optimiert werden können ja umso besser
  • ❤️可愛いちゃん️❤️ ❤️可愛いちゃん️❤️:
    Java große Feature ist der Hotspot Compiler, wenn du den nicht berücksichtigst, wirfst du viel weg.
  • SirYwell SirYwell:
    (Btw kann man die Kalkulation auch ohne Summe schreiben, wobei dann u.U. woanders der Overflow kommt, weshalb die Ergebnisse bei zu großen Zahlen nicht stimmen)
  • iTz_Proph3t iTz_Proph3t:
    ihr habt ja mal n tolles thema :D
  • SirYwell SirYwell:
    Find ich auch :D
  • Kroseida Kroseida:
    wieder da, jaja - bringe tolle Themen xD
  • iTz_Proph3t iTz_Proph3t:
    nämlöich welche?
  • ❤️可愛いちゃん️❤️ ❤️可愛いちゃん️❤️:
    @iTz_Proph3t ist einfach nur neidisch, weil er nix versteht obwohl er ne Glaskugel hat.
    ❤️可愛いちゃん️❤️ ❤️可愛いちゃん️❤️: Exakt
    Oben