Skocz do zawartości
  • 0

Yaml nie chce się wczytać.


Pytanie

Być może mój problem jest kretyński ale nie wiem jak go naprawić stąd moje pytanie.
 

private static File file = new File(Messages.class.getResource("/messages/messages_en.yml").getFile());
	private static YamlConfiguration yaml = YamlConfiguration.loadConfiguration(file);

Jak wyświetlam sobie file.getName() to normalnie otrzymuje messages_en.yml. Natomiast yaml tak jakby nie istnieje. Gdy próbuje wyświetlić w konsoli yaml.getName() to nic nie wyświetla. A jak próbuje wyświetlić jakąś zmienną to zatrzymuje się na ifie który sprawdza czy zmienna istnieje.
Ten if wygląda tak:
 

if (yaml.get(lookingMessage) == null) {
			throw new Error("[ERROR] " + lookingMessage + "doesn't exist in that file!");
		}

Od razu spytam też czy takie wyświetlanie błędu jest poprawne? W js robiłem to zawsze za pomocą "throw new Error", spróbowałem i okazało się że również tutaj zadziałało.

Pozdrawiam i przepraszam jeżeli te pytanie jest szczególnie głupie ale jestem bardzo bardzo nowy w pisaniu pluginów.

Odnośnik do komentarza
https://skript.pl/temat/48831-yaml-nie-chce-si%C4%99-wczyta%C4%87/
Udostępnij na innych stronach

15 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

Dziwnie tworzysz ten plik, zrób to tak:

File file = new File("sciezka/plilk.yml");
if (!file.exists()) {
	plugin.saveResource("plik.yml", false);
}

/plugin odnosi się do klasy głównej

po 2.

nie sprawdza się czy yaml.get() == null tylko czy yaml.contains()

po 3.

Wyświetlanie błędu może ale nie musi tak wyglądać, można po prostu użyć System.out.println lub loggera, jak wolisz.

 

Edytowane przez kerpson
Odnośnik do komentarza
https://skript.pl/temat/48831-yaml-nie-chce-si%C4%99-wczyta%C4%87/#findComment-304079
Udostępnij na innych stronach

  • 0

 

1 godzinę temu, kerpson napisał:

Dziwnie tworzysz ten plik, zrób to tak:


File file = new File("sciezka/plilk.yml");
if (!file.exists()) {
	plugin.saveResource("plik.yml", false);
}

/plugin odnosi się do klasy głównej

po 2.

nie sprawdza się czy yaml.get() == null tylko czy yaml.contains()

po 3.

Wyświetlanie błędu może ale nie musi tak wyglądać, można po prostu użyć System.out.println lub loggera, jak wolisz.

 

No ale dalej z jakiegoś powodu yaml jest pusty 

Odnośnik do komentarza
https://skript.pl/temat/48831-yaml-nie-chce-si%C4%99-wczyta%C4%87/#findComment-304099
Udostępnij na innych stronach

  • 0
13 minut temu, kerpson napisał:

a czy on jest wgl jakoś zapełniony w projekcie?

I możesz pokazać kod i ewentualnie blędy z konsoli

Generalnie zamysł miałem taki, aby stworzyć klasę a w niej funkcję która będzie zwracać wiadomość jakiej aktualnie potrzebuje.
Tak wygląda klasa Main:
 

package me.skiuel.easycase;

import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin implements Listener {
	public void onEnable() {
		String loadMsg = Messages.msg("pluginLoadMessage");
		System.out.println(loadMsg);
	}

}

Tak wygląda klasa Messages:
 

package me.skiuel.easycase;

import java.io.File;

import org.bukkit.configuration.file.YamlConfiguration;

public class Messages {
	private static File file = new File(Messages.class.getResource("/messages/messages_en.yml").getFile());
	private static YamlConfiguration yaml = YamlConfiguration.loadConfiguration(file);
	
	public static String msg(String lookingMessage) {
		System.out.println(file.getName());
		System.out.println(yaml.getName());
		if (yaml.get(lookingMessage) == null) {
			throw new Error("[ERROR] easyCase: That message doesn't exist! " + lookingMessage);
		}
		
		return yaml.getString(lookingMessage);
	}
}

Tak wygląda sam plik messages_en.yml:
 

pluginLoadMessage: easyCase was loaded succesful!

To wysypuje konsola: 
 

java.lang.Error: [ERROR] easyCase: That message doesn't exist! pluginLoadMessage
        at me.skiuel.easycase.Messages.msg(Messages.java:15) ~[?:?]
        at me.skiuel.easycase.Main.onEnable(Main.java:8) ~[?:?]
        at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:263) ~[patched_1.16.5.jar:git-Paper-594]
        at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:380) ~[patched_1.16.5.jar:git-Paper-594]
        at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:483) ~[patched_1.16.5.jar:git-Paper-594]
        at org.bukkit.craftbukkit.v1_16_R3.CraftServer.enablePlugin(CraftServer.java:501) ~[patched_1.16.5.jar:git-Paper-594]
        at org.bukkit.craftbukkit.v1_16_R3.CraftServer.enablePlugins(CraftServer.java:415) ~[patched_1.16.5.jar:git-Paper-594]
        at net.minecraft.server.v1_16_R3.MinecraftServer.loadWorld(MinecraftServer.java:591) ~[patched_1.16.5.jar:git-Paper-594]
        at net.minecraft.server.v1_16_R3.DedicatedServer.init(DedicatedServer.java:280) ~[patched_1.16.5.jar:git-Paper-594]
        at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:1065) ~[patched_1.16.5.jar:git-Paper-594]
        at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:289) ~[patched_1.16.5.jar:git-Paper-594]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_281]

A tak wygląda drzewko plików:
zgtxOI3.png

Odnośnik do komentarza
https://skript.pl/temat/48831-yaml-nie-chce-si%C4%99-wczyta%C4%87/#findComment-304105
Udostępnij na innych stronach

  • 0
27 minut temu, kerpson napisał:

plik .yml powinien być w tym miejscu gdzie jest plugin.yml

no ale jak będą 2 języki to lepiej by to wyglądało w jakimś folderze. Totalnie się pogubiłem o co chodzi z tą scieżką.

private static File file = new File(Messages.class.getResource("/messages/messages_en.yml").getFile());

Gdzie tak własciwie jestem jako messages.class.getResource. Totalnie się pogubiłem jaką tam sieżkę dać

Odnośnik do komentarza
https://skript.pl/temat/48831-yaml-nie-chce-si%C4%99-wczyta%C4%87/#findComment-304117
Udostępnij na innych stronach

  • 0
6 godzin temu, Skiuel napisał:

Totalnie się pogubiłem jaką tam sieżkę dać

To gdzie się wygeneruje plik po załadowaniu pluginu to już zależy od ciebie. A plik w projekcie stwórz tam gdzie masz plugin.yml, tak jak napisał Skiuel.

Odnośnik do komentarza
https://skript.pl/temat/48831-yaml-nie-chce-si%C4%99-wczyta%C4%87/#findComment-304119
Udostępnij na innych stronach

  • 0

Pliki .yml, .txt czy coś innego mają być tam gdzie plugin.yml, nigdzie indziej. Jeżeli chcesz mieć jakiś plik w folderze np. messages to pierw ten folder musisz utworzyć a nie robić package...

Masz dużo filmów z przykładami:

 

Odnośnik do komentarza
https://skript.pl/temat/48831-yaml-nie-chce-si%C4%99-wczyta%C4%87/#findComment-304131
Udostępnij na innych stronach

  • 0
2 godziny temu, kerpson napisał:

Pliki .yml, .txt czy coś innego mają być tam gdzie plugin.yml, nigdzie indziej. Jeżeli chcesz mieć jakiś plik w folderze np. messages to pierw ten folder musisz utworzyć a nie robić package...

Masz dużo filmów z przykładami:

 

ale we wszystkich tych poradnikach oni robili configi w folderze serwerowym a z tym nie miałem żadnego problemu. Ja próbuje odczytać plik który jest w samym pluginie

Odnośnik do komentarza
https://skript.pl/temat/48831-yaml-nie-chce-si%C4%99-wczyta%C4%87/#findComment-304138
Udostępnij na innych stronach

  • 0
W dniu 21.05.2021 o 14:57, kerpson napisał:

plik w samym pluginie? wtf, rozjaśnij myśl bo jedynie co zrobiłeś to bezsensowny package z plikiem messages.yml

Chce wczytać plik z source samego pluginu. Tzn umieścić plik z wiadomościami w samym projekcie pluginu.

Odnośnik do komentarza
https://skript.pl/temat/48831-yaml-nie-chce-si%C4%99-wczyta%C4%87/#findComment-304226
Udostępnij na innych stronach

  • 0
14 godzin temu, Skiuel napisał:

Chce wczytać plik z source samego pluginu. Tzn umieścić plik z wiadomościami w samym projekcie pluginu.

no to robisz sobie klasę np. Lang

public final class Lang {

	public final static String CUSTOM_MESSAGE = "jakaś wiadomość";

	private Lang() {}

}

no i wtedy w plugine np.

player.sendMessage(Lang.CUSTOM_MESSAGE);

 

Odnośnik do komentarza
https://skript.pl/temat/48831-yaml-nie-chce-si%C4%99-wczyta%C4%87/#findComment-304251
Udostępnij na innych stronach

  • 0
32 minuty temu, kerpson napisał:

no to robisz sobie klasę np. Lang


public final class Lang {

	public final static String CUSTOM_MESSAGE = "jakaś wiadomość";

	private Lang() {}

}

no i wtedy w plugine np.


player.sendMessage(Lang.CUSTOM_MESSAGE);

 

Na to nie wpadłem dzięki wielkie <3

Odnośnik do komentarza
https://skript.pl/temat/48831-yaml-nie-chce-si%C4%99-wczyta%C4%87/#findComment-304252
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ę...