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

Config Ober- und Unterpunk auslesen

xXSchrandXx

Schafhirte
Registriert
16 September 2012
Beiträge
126
Diamanten
302
Minecraft
xXSchrandXx
Hi,

ich wollte in meinem Plugin Smileys mit einfügen, welche man in der Config.yml bearbeiten kann. Die Config sollte endlos sein und so aussehen:
Code:
Smileys:
  <3: §4♥
  herz: §4♥
Wie kann ich das jetzt für jeden Unterpunkt in 'Smileys:' austauschen.
Beispiel: message.replace("#" + "herz", "§4♥" + "§r");
Falls die Beschreibung zu unverständlich ist, lasst es mich wissen.

Im voraus schon mal vielen dank für eure Hilfe.

Mit freundlichen Grüßen
xXSchrandXx
 
Zuletzt bearbeitet:

BlackHole

Workaholic
Registriert
1 Juli 2012
Beiträge
752
Diamanten
0
Minecraft
BlackHole
Wenn du "Smilies" in einer Map eingelesen hast, dann kannst es es z.B. so machen:
Code:
for (Map.Entry<String, String> entry : map.entrySet()) {
    message = message.replace("#" + entry.getKey(), entry.getValue() + ChatColor.RESET);
}
 

xXSchrandXx

Schafhirte
Registriert
16 September 2012
Beiträge
126
Diamanten
302
Minecraft
xXSchrandXx
Ich hab einfach mal ein Paar Sachen ausgetestet und bin jetzt bei dem hier stehen geblieben:
Code:
  @EventHandler
  public void ChatEvent1(AsyncPlayerChatEvent ev)
  { if (ev.getPlayer().hasPermission("chat.smiley")) {
    String message = ev.getMessage();
    FileConfiguration c = System_Main.getInstance().getConfig();
    int x = 0;
    HashMap<String, String> map = new HashMap<String, String>();
    for (String key : c.getConfigurationSection("Smileys").getKeys(false)) {
      map.put(key, (String) c.get("Smileys."+key));
    }
    while (x < c.getConfigurationSection("Smileys").toString().length())
    {
      for (Map.Entry<String, String> entry : map.entrySet()) {
        message = message.replace("#" + entry.getKey(), entry.getValue() + ChatColor.RESET);
        x++;
      }
    }
    ev.setMessage(message);
  }}
}

Jetzt wollt ich noch gerne wissen, wie ich equalsIgnoreCase(String) für entry.getKey() bekommen kann und ob der Code so ok ist :D
 

JOO200

Braumeister
Registriert
18 Dezember 2016
Beiträge
442
Diamanten
228
Momentan erstellst du bei jedem AsyncChatEvent eine neue HashMap. Definiere die HashMap außerhalb der Methode und beschreibe diese beim Konstruktor-Aufruf deiner Klasse.

Ansonsten frag ich mich, was du mit deinem "while (x < c.getConifgurationSection("Smileys").toString().length())" machen möchtest - das macht für mich herzlich wenig Sinn ;)

Ansonsten müsste diese for-Schleife durch alle map-Einträge durch laufen und dir die Nachricht ersetzen - ich wüsste nicht, wofür eine while-Schleife hier angebracht sein sollte.
Code:
for (Map.Entry<String, String> entry : map.entrySet()) {
        message = message.replace("#" + entry.getKey(), entry.getValue() + ChatColor.RESET);
      }
 

BlackHole

Workaholic
Registriert
1 Juli 2012
Beiträge
752
Diamanten
0
Minecraft
BlackHole
Eine kurze Suche hat bei Stackoverflow.com diese Lösung gefunden:
Code:
message = message.replaceAll("(?i)" + Pattern.quote("#" + entry.getKey()), entry.getValue() + ChatColor.RESET);

(Besser wäre es natürlich, aus der Config direkt Patterns zu erzeugen, aber ich denke, dass es auch so für deine Zwecke ausreicht.)
 

xXSchrandXx

Schafhirte
Registriert
16 September 2012
Beiträge
126
Diamanten
302
Minecraft
xXSchrandXx
Fertige Code:
Code:
  @EventHandler
  public void ChatEvent1(AsyncPlayerChatEvent ev)
  {
    if (ev.getPlayer().hasPermission("chat.smiley")) {
      String message = ev.getMessage();
      for (Map.Entry<String, String> entry : System_Main.getInstance().smileys.entrySet()) {
        message = message.replaceAll("(?i)" + Pattern.quote("#" + entry.getKey()), entry.getValue() + ChatColor.RESET);
      }
      ev.setMessage(message);
    }
  }
Code:
  public HashMap<String, String> smileys = new HashMap<String, String>();
  public void onEnable()
  {
    getConfig().addDefault("Smileys.smiley", "§e§l:-D");
    getConfig().options().copyDefaults(true);
    saveConfig();
    for (String key : getConfig().getConfigurationSection("Smileys").getKeys(false)) {
      smileys.put(key, (String) getConfig().get("Smileys."+key));
    }
    Bukkit.getServer().getPluginManager().registerEvents(new <Listener>, this);
  }
 
Zuletzt bearbeitet:
Oben