Skocz do zawartości
  • 0

Wczytywanie Stringów z pliku


Pytanie

Siema, mam sobie plik przechowujący informację o rangach:

W jaki sposób mógłbym wczytać nazwy rang do pluginu? Próbowałem w taki sposób:

@SuppressWarnings("static-access")
public class przykladowaklasa {
	
	RanksData rd;
	public przykladowaklasa() {
		
		rd = RanksData.getInstance();
	}
	
	String x = "test";
	public void test() {
		List<String> rList = rd.getData().getStringList("ranks");
		if(rList.contains(x)) {
			Bukkit.getConsoleSender().sendMessage("jest juz takie cos w pliku!");
		} else {
			Bukkit.getConsoleSender().sendMessage("nie ma czegos takiego w pliku!");
		}
	}
		
}

Ale niestety przy wykonywaniu polecenia tworzenia rang, w którym chciałem sprawdzać, czy ranga o nazwie określonej w jednym z argumentów już istnieje występuje błąd.

Odnośnik do komentarza
https://skript.pl/temat/49548-wczytywanie-string%C3%B3w-z-pliku/
Udostępnij na innych stronach

2 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

Bukkit API oferuje coś takiego jak Configuration API. Daje to spore możliwości wczytywania i zapisywania plików .yml.

Można stworzyć sobie klasę powiedzmy Rank. Ta klasa implementowałaby interfejs ConfigurationSerializable i oprócz wymaganej metody serialize(), która zwraca HashMap<String, Object> (musisz sobie napisać), trzeba dodać statyczną metodę deserialize(HashMap<String, Object> dataMap), która weźmie HashMapę, po kolei wszystkie wartości tak jak zapisywałeś to teraz odczytasz (do czego wykorzystasz upcasting, (jakisTyp) dataMap.get("nazwawartosci")). Po odczytaniu musisz stworzyć nowy obiekt klasy Rank i go zwrócić :D

Zarejestruj sobie teraz tą klasę w onEnable() za pomocą ConfigurationSerialization.registerClass(Rank.class); Bez tego nie zadziała :)

Jak już masz coś takiego to teraz wystarczy użyć getConfig().getList("ranks") i zcastować to do List<Rank>. I masz swoją listę rang w postaci obiektów. A zapisywanie jeszcze prostsze getConfig().set("ranks", nazwaZmiennejKtoraPrzechowujeListeRang); Nie zapomnij o saveConfig(); przy wyłączeniu (onDisable()).

Więcej przeczytasz tu: https://bukkit.fandom.com/wiki/Configuration_API_Reference

A to o czym pisałem pod nagłówkiem o nazwie "Serializing and Deserializing Objects"

Alternatywny sposób (łatwiejszy)

Używasz getConfig().getConfigurationSection("ranks").getKeys(false) i to zwraca ci listę Stringów, które są nazwami rang tak jak w twoim pliku. Potem możesz odczytywać poszczególne wartości za pomocą getConfig().get("ranks." + nazwaRangiZTejListy + ".prefix"); Zamiast tego prefix to ustawiasz sobie co tam chcesz odczytać.

Jak znasz nazwę rangi, którą chcesz odczytać to możesz użyć od razu getConfig().get("ranks.GRACZ.prefix");

Odnośnik do komentarza
https://skript.pl/temat/49548-wczytywanie-string%C3%B3w-z-pliku/#findComment-307333
Udostępnij na innych stronach

Nieaktywny
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...