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

Messages.yml

Anty

Minecrafter
Registriert
23 März 2018
Beiträge
4
Alter
26
Diamanten
300
Hallo Community,

Ich hab mich mal vor ungefähr nem viertel jahr hingehockt und mir mal eclipse heruntergeladen und rum probiert,ich selber bin noch ein "noob" aber ich verssuche es mir einfach selbst beizubringen,allerdings komm ich auch mal nicht weiter so wie jetzt daher frage ich euch, danke ich vorauss.....:D, nun bin ich dabei für mein plugin eine seperate Messages.yml Datei anzufertigen nun ich habe die datei erstellt aber hab keine Ahnung wie ich die Messages Auslessen soll hier mein ein schnipsel vom bisherigem code:
(Noch eine kleine frage, gibt es hier sowas wie eine code funktion ? bin zu blöd die zu finden:confused:)

Code:
  File Messages = new File("plugins/Chillerkasten", "Messages.yml");
  FileConfiguration Messages_cfg = YamlConfiguration.loadConfiguration(Messages);

    Messages_cfg.set("Messages.test", "test");
    try {
        Messages_cfg.save(Messages);
    } catch (IOException e) {
        e.printStackTrace();

//Dean: Logs, Code & Configs bitte entweder als Code einfügen oder als Dateianhang, bzw.auf pastebin.com hochladen! Danke!
 
Zuletzt bearbeitet von einem Moderator:

ausgebildet

Redstoneengineer
Registriert
30 Juni 2017
Beiträge
41
Alter
27
Diamanten
300
Minecraft
ausgebildet
Hallo ,

um einen Code richtig einzufügen. Fährst du mit dem Mauszeiger in dem hier im Forum gebotenen Editor auf die Büroklammer oben rechts.
Dann wählst du "Code" aus - Andernfalls kannst du deine Codes auch zwischen [ code] und [ /code] schreiben. Diese werden dann automatisch formatiert. Du musst einfach nur die Leerzeichen in den Klammern weglassen.

Zu deinem Thema. Da ich mal denke das du deine Files in einer seperaten Class erstellst , würde dir folgendes weiterhelfen.

Code:
 public String get(String path) {
   return Messages_cfg.getString(path);
 }

Jetzt kannst du bei belieben zb. dem Prefix folgendes nutzen

Code:
 DeineKlasse.get("Den_pfad_in_der_messages_yml_wo_der_prefix_steht");

Solltest du deine Class static haben , setz einfach bei "public String" ein static zwischen

Code:
 public static String get(String path) {
   return Messages_cfg.getString(path);
 }

Um Farbcodes in der Messages.yml nutzen zu können nutz #translateAlternateColorCodes

Dies dürfte dir auf die Sprünge helfen.
Hoffe es reicht.

Grüße
 

SirYwell

PlotSquared Entwickler
Registriert
30 Juni 2017
Beiträge
540
Diamanten
488
Minecraft
SirYwell
Theoretisch über z.B. Messages_cfg.getString(path) ABER:
1. In Java schreibt man Variablen immer in lowerCamelCase. Unterstriche sind weniger elegant.
2. Mach dir Gedanken darüber, wo und wann du die FileConfiguration lädst. Die Daten von der Festplatte zu laden benötigt jede Menge Zeit/Leistung. Das FileConfiguration-Objekt cached die Datei übrigens.
3. Falls du eine vorkonfigurierte Datei haben möchtest, solltest du dir das hier mal anschauen.
4. Anstelle des Pfads als hardgecodeten String solltest du eher diese Methode verwenden, um an den Pfad zu kommen.
 

moinless

Schafhirte
Registriert
4 Oktober 2013
Beiträge
103
Diamanten
302
Außer bei Static Variablen. Da ist auch der Anfang groß:
Code:
public static String IsEnabled;
public String isEnabled;

Wo hast du das denn her? So stimmt das nicht. Alle Variablen in Java werden in lowerCamelCase geschrieben. Einzige Ausnahmen bilden Konstanten. Diese werden komplett in Caps und bei mehreren Wörtern mit Unterstrich verbunden geschrieben.
Code:
public static final String EXAMPLE_CONSTANT = "Konstante";
 

KaeseKuchen_DEV

Redstoneengineer
Registriert
11 Mai 2016
Beiträge
47
Diamanten
300
Minecraft
KaeseKuchenDEV
Wo hast du das denn her? So stimmt das nicht. Alle Variablen in Java werden in lowerCamelCase geschrieben. Einzige Ausnahmen bilden Konstanten. Diese werden komplett in Caps und bei mehreren Wörtern mit Unterstrich verbunden geschrieben.
Code:
public static final String EXAMPLE_CONSTANT = "Konstante";
Danke, dass du mich nochmal darauf aufmerksam gemacht hast. Mir wurde dies von einem Youtuber gesagt. Mir kam dies auch zu Beginn ganz komisch rüber, aber ich war nicht in der Stimmung dies zu überpfrüfen. Dies ist nun einige Zeit her und ich denke, da ich zurzeit generell nicht ganz klar im Kopf bin(Feiern) habe ich das verwechselt.
Sorry für das Missverständnis
 

JOO200

Braumeister
Registriert
18 Dezember 2016
Beiträge
442
Diamanten
228
Was ich immer gerne bei Messages mache, ist eine "EnumMap" anzulegen. Also ein Enum, in welchen 2 Strings verknüpft sind.
Im Endeffekt sieht das dann so aus:
Code:
enum MessageText {
    MY_TEXT("path.to.mytext", "Dies ist mein Text"),
    ANOTHER_TEXT("path.to.secondtext", "Dies ist ein anderer Text");
  
    String path, message;
    public MessageText(String path, String message) {
        this.path = path;
        this.message = message;
    }

    public String getPath() {
         return this.path;
    }

    public String getMessage() {
        return this.message;
    }

    public void setMessage(String message) {
         this.message = message;
    }
}

Dadurch kann ich von überall auf diese Nachrichten über ein Enum zugreifen. Man muss nicht mehr die Pfade per Hand abtippen und hat keine Gefahr, dass man durch das falsche Abtippen/Kopieren einen NPE bekommt.

Zudem kann man beim Initialisieren des Plugins nach der Erstellung der FileConfiguration durch alle Enums iterieren und entweder die Nachricht in der FileConfiguration hinzufügen, wenn es diese noch nicht gibt oder diese laden, wenn es diese gibt. Das hinzufügen von neuen Nachrichten ist dadurch simpel möglich.

Man kann das dann natürlich noch erweitern :D
Code:
public class MessageHandler {
    private FileConfiguration config;
    public MessageConfiguration(MyPlugin plugin) {
        this.config = new FileConfiguration(Paths.get(plugin.getDataFolder(), "messages.yml"));
        this.config.load(); // oder irgendwie so (ist grad alles ausm Kopf);
        loadMessages();
    }
   
    private void loadMessages() {
        Arrays.stream(MessageText.values()).forEach(e -> {
            if(config.getString(e.getPath() != null) {  // Die FileConfiguration hat bereits den String
                e.setMessage(config.getString(e.getPath());
            } else {    // String unbekannt
                config.setString(e.getPath(), e.getMessage());
            }
        this.config.save();
    }

    public void sendMessage(Player player, MessageText text, String ... replacements) {
        player.sendMessage(MessageFormat.replace(text, replacements));
    }

    public void sendMessage(Player player, MessageText text) {
        player.sendMessage(text);
    }
}

Vielleicht hilft das jemanden.
Ich hab grad keine IDE offen, aber so im Groben sollte das ganze üngefähr funktionieren :p
 
Oben