Siema, mój kod: https://hastebin.com/awukilawip.java błąd z konsoli: https://pastebin.com/W6R7nW5w
Siema, mój kod: https://hastebin.com/awukilawip.java błąd z konsoli: https://pastebin.com/W6R7nW5w
Masz stworzony config? jest w nim zawartość? w eclipse/pliki
tak, config jest stworzony.
Spróbuj zrobić tak:
p.sendMessage(Main.getInst().getConfig().getString("zalogujUsage").replace("&", " §");
Btw polecam zrobić jakiś Config który będziesz ładować na starcie czy coś, ładowanie live to zły pomysł na dłuższą metę.
luxDev:
p.sendMessage(Main.getInst().getConfig().getString("zalogujUsage").replace("&", " §");
W klasie Main mam taki kod:
@Override public void onEnable() {
//REJESTROWANIE EVENTÓW PluginManager pm = Bukkit.getServer().getPluginManager(); pm.registerEvents(new OnJoinListener(), this); pm.registerEvents(new OnPlayerClicksListener(), this); pm.registerEvents(new SomeListeners(), this); pm.registerEvents(new PlayerCommandPreprocessListener(), this); //REJESTROWANIE KOMEND getCommand("wersja").setExecutor(new WersjaCommand()); getCommand("zaloguj").setExecutor(new ZalogujCommand()); getCommand("zarejestruj").setExecutor(new ZarejestrujCommand()); getCommand("wyloguj").setExecutor(new WylogujCommand()); getCommand("zmienhaslo").setExecutor(new ZmienhasloCommand()); getCommand("zalogowano").setExecutor(new ZalogowanoCommand()); //TWORZENIE PLIKU KONFIGURACYJNEGO this.saveDefaultConfig(); Bukkit.getConsoleSender().sendMessage("[§6" + this.getName() + "§f] §aPlugin zostal poprawnie wlaczony.");
}
Nie wiem za bardzo o co Ci chodzi, możesz dokładniej wytłumaczyć?
@EDIT: To co dałeś - nie działa. Ten sam błąd.
W ten sposób https://hastebin.com/quteraxinu.swift BTW Masz zły import do ChatColor :P (md_5) zmień go na org.bukkit.ChatColor zmieniłeś już ups :D
To oznacza że ten String w configu nie istnieje :o Pokaż config
Uzycie komendy /zaloguj.
> zalogujUsage: "&c&lUzycie: &r/zaloguj "
> # Uzycie komendy /zarejestruj.
> zarejestrujUsage: "&c&lUzycie: &r/zarejestruj "
> # Uzycie komendy /wyloguj.
> wylogujUsage: "&c&lUzycie: &r/wyloguj"
> # Uzycie komendy /zmienhaslo.
> zmienhasloUsage: "&c&lUzycie: &r/zmienhaslo "
Tosz próbujesz to pobrać: String zalogujUsage = Main.getInst().getConfig().getString("loginUsage");
A w configu masz zalogujUsage
XD
Nawet jak poprawiłem tą literówke, błąd jest nadal ten sam.
zrób debug, czy coś, spróbuj wysłać bez niczego w konsoli tą wiadomość czyli np. w Main na końcu System.out.println(getConfig().getString("zalogujUsage"));
Jak będzie null to znaczy że to co jest w configu się nie zgadza z tym co próbujesz wyciągnąć, btw te ">" w tym kodzie co mi wkleiłeś to tak jest czy to program do otwierania plików dodaje?
Przy okazji luxDev dobrze poradził Ci, aby nie wczytywać za każdym razem tego configu. Przy ładowaniu serwera zapisz sobie te "loginUsage" do jakiejś zmiennej i pobieraj wartość z niej, a nie z configa.
Kiedy już to zrobisz, procesor serwera Ci ładnie podziękuje. Tutaj to błahostka, ale gdybyś co chwila chciał dostać się do jakichś podstawowych danych (bo w configu masz np. jaka ma być szansa na drop czegoś) dopiero zobaczyłbyś o czym mowa 😃
Mimo wszystko to rozwiązanie ma jedną wadę - musisz dodatkowo napisać komendę do reloadu configa (aby zaktualizować zmienne)
#Offtop Jak załadować konfigurację podczas ładowania pluginu? Oto przykład:
File configFile = new File(getDataFolder(), "config.yml");
@SuppressWarnings("unused")
private YamlConfiguration config;
@Override
public void onLoad(){
if(!configFile.exists()){ //sprawdza, czy konfiguracja istnieje
saveResource("config.yml", true); //zapisanie konfiguracji
config = YamlConfiguration.loadConfiguration(configFile); //załadowanie
} else {
config = YamlConfiguration.loadConfiguration(configFile); //załadowanie
}
}
Używanie (podaję przykład):
String loginUsage = config.getString("loginUsage");
Lub tak :D
Tutaj all:
https://github.com/Dziksayu/CustomDeathMessages/blob/master/src/pl/mcdev/cdm/managers/Config.java
A uzycie:
String s = Config.JAKIS-TAM-STRING;
a może ma w public void onLoad(){ ? :D
Ale to totalnie bez sensu xD
no w sumie onLoad wykonuje się przed onEnable, ja tam bym wstawił instance = this; w onLoad :D
Chodziło mi o to, że to w zasadzie jedyna możliwość popełnienia błędu - gdyby instancja była zarejestrowana to nawet jeżeli w configu byłby błąd, to zmienna zalogujUsage co prawda byłaby równa null, ale nie wywaliłaby błędu.
W skrócie do autora tematu: Jestem prawie pewien, że nie zarejestrowałeś instancji pluginu. Jeżeli nie wiesz o czym mówię, prześledź Twoją metodę getInst() w głównej klasie.
Zaraz jeszcze raz prześledzę kod, zapiszę podczas ładowania pluginu i napiszę wam mój wynik.
@Marcoral @luxDev a najlepiej, jak czlowiek, przekazywac instancje przez konstruktor do klas, ktore tego potrzebuja. Robienie statycznego singletona raz, ze jest unsafe, bo zawsze jakis zartownis moze to refleksja edytowac i po pluginie, dwa, jest to malo wydajne, trzy, dajecie wtedy kazdemu pluginowi do niego dostep.
Ładuj Stringi podczas załadowania pluginu a nie ciągłe pobieranie..
String example;
FileConfiguration cfg;
@Override
public void onLoad() {
cfg = this.getConfig();
examle = cfg.getString("example");
}
(Nie musisz używać cfg, ale przy większej ilości zmiennych jest to zalecane :))
Nie używaj System.out, a co gorsza getConsoleSender.. Używaj przyjaznego dla wszystkich loggera - this.getLogger().info("Plugin has been enabled!");
Drugi raz Ci to pokazuję:
Ah no tak, ale nie zaszkodzi napisać.
Tyle, że już kod też zniknął na hastebinie ;d
Ten temat został automatycznie zamknięty 32 dni po ostatnim wpisie. Tworzenie nowych odpowiedzi nie jest już możliwe.