Wie programmiert man in ein Scoreboard ein wie viele blöcke gesetzt und abgebaut wurden??
Guten Abend,
aktuell sitze ich an einem BuildEvent System und ich komme leider nicht drauf, wie man in ein Scoreboard ein programmiert, dass da alle gesetzten und abgebauten blöcke des einzelnen Users stehen in Zahlen:
Zum Beispiel "Placed blocks » 10"
Zum Beispiel "Removed blocks » 11"
Bitte ein schnell Antworten!!!
Danke
Liebe Grüße
1 Antwort
Du nimmst 2 Maps ... HashMap<UUID, double>
Als UUID nimmste den Spieler, wenn der Spieler ein Block platziert, updatest du den Wert in der ersten Map. Wenn ein Spieler einen Block abbaut, updatest du den Wert in der zweiten Map. Speicherst die Werte alle paar Minuten in ein File.
Das ist jetzt nur so in etwa, habe ich jetzt nicht in Eclipse gemacht
Du hast eine Hauptklasse, die nennen wir jetzt einfach Main. Dort hast du 2 Statische HashMaps
public static HashMap<UUID, Double> playerBlockBreakMap = new HashMap<>();
public static HashMap<UUID, Double> playerBlockPlaceMap = new HashMap<>();
Dann hast du 2 Listener. Einmal BlockPlaceEvent und einmal BlockBreakEvent
UUID uuid = event.getPlayer.getUniqueId();
if(Main.playerBlockBreakMap.containsKey(uuid)){
Main.playerBlockBreakMap.replace(uuid, Main.playerBlockBreakMap.get(uuid)++);
} else {
Main.playerBlockBreakMap.put(uuid, 1D);
}
Das Scoreboard kannst du dann einfach updaten lassen, sobald das Update durch ist. Das Speichern solltest du allerdings nicht jedes Mal machen, wenn das Event aufgerufen wird, sondern alle paar Minuten, denn, wenn du es jedes Mal machst und der Spieler z.B. ganz viele Blöcke hintereinander platziert oder abbaut und das 100 Spieler gleichzeitig machen, hast du eine enorme Festplatten Aktivität.
Wenn du genau wissen willst, welcher Block der Spieler abgebaut hat, muss du die Map wie folgt anlegen.
HashMap<UUID, BlockData>
Die Klasse BlockData musst du dann aber selbst noch anlegen. Aber das wirst du sicherlich wissen, wie man eine Klasse erstellt und was dort rein muss.
Um die Daten zu bekommen, um was für ein Block es sich handelt, kannst du mit meiner API machen. Die API ist allerdings nicht auf dem neusten Stand. Glaub die ist nur 1.10, wenn ich mich recht erinnere: https://www.spigotmc.org/resources/xitemapi-get-the-name-of-an-item-block-with-the-raw-name-and-data-value.29667/
Ok danke, aber kannst du mir mal vielleicht schicken, wie du das machen würdest. Verstehe das nicht ganz