szymhal | 2021-02-17 10:25:48 UTC | #1
Siema,
mój kod: https://hastebin.com/awukilawip.java
błąd z konsoli: https://pastebin.com/W6R7nW5w
luxDev | 2017-04-23 13:54:32 UTC | #2
Masz stworzony config? jest w nim zawartość? w eclipse/pliki
szymhal | 2017-04-23 13:55:06 UTC | #3
tak, config jest stworzony.
luxDev | 2017-04-23 13:56:26 UTC | #4
Spróbuj zrobić tak:
p.sendMessage(Main.getInst().getConfig().getString("zalogujUsage").replace("&", " §");
luxDev | 2017-04-23 13:58:25 UTC | #5
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ę.
szymhal | 2017-04-23 14:00:32 UTC | #6
[quote=”luxDev, post:4, topic:2564”]
p.sendMessage(Main.getInst().getConfig().getString(“zalogujUsage”).replace(“&”, ” §”);
[/quote]
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.
luxDev | 2017-04-23 14:03:31 UTC | #7
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
luxDev | 2017-04-23 14:05:30 UTC | #8
To oznacza że ten String w configu nie istnieje :o
Pokaż config
szymhal | 2017-04-23 14:07:57 UTC | #9
> # Uzycie komendy /zaloguj.
> zalogujUsage: "&c&lUzycie: &r/zaloguj <haslo>"
> # Uzycie komendy /zarejestruj.
> zarejestrujUsage: "&c&lUzycie: &r/zarejestruj <haslo> <powtorzHaslo>"
> # Uzycie komendy /wyloguj.
> wylogujUsage: "&c&lUzycie: &r/wyloguj"
> # Uzycie komendy /zmienhaslo.
> zmienhasloUsage: "&c&lUzycie: &r/zmienhaslo <stareHaslo> <noweHaslo>"
luxDev | 2017-04-23 14:09:10 UTC | #10
Tosz próbujesz to pobrać: String zalogujUsage = Main.getInst().getConfig().getString("loginUsage");
A w configu masz zalogujUsage
XD
szymhal | 2017-04-23 14:11:13 UTC | #11
Nawet jak poprawiłem tą literówke, błąd jest nadal ten sam.
luxDev | 2017-04-23 14:14:07 UTC | #12
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?
Marcoral | 2017-04-23 14:15:23 UTC | #13
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 :smiley:
Mimo wszystko to rozwiązanie ma jedną wadę - musisz dodatkowo napisać komendę do reloadu configa (aby zaktualizować zmienne)
DBanaszewski | 2017-04-23 14:20:18 UTC | #14
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");
luxDev | 2017-04-23 14:22:05 UTC | #15
Lub tak :D
https://github.com/Dziksayu/CustomDeathMessages/blob/master/src/pl/mcdev/cdm/managers/ConfigManager.java
Tutaj all:
https://github.com/Dziksayu/CustomDeathMessages/blob/master/src/pl/mcdev/cdm/managers/Config.java
A uzycie:
String s = Config.JAKIS-TAM-STRING;
Marcoral | 2017-04-23 14:24:14 UTC | #16
Błąd u Ciebie jest spowodowany NullPointerException.
W onEnable zapomniałeś zapisać instancji pluginu do zmiennej.
luxDev | 2017-04-23 14:24:53 UTC | #17
a może ma w public void onLoad(){ ? :D
Marcoral | 2017-04-23 14:25:54 UTC | #18
Ale to totalnie bez sensu xD
luxDev | 2017-04-23 14:29:28 UTC | #19
no w sumie onLoad wykonuje się przed onEnable, ja tam bym wstawił instance = this; w onLoad :D
Marcoral | 2017-04-23 14:33:46 UTC | #20
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.
szymhal | 2017-04-23 14:59:38 UTC | #21
Zaraz jeszcze raz prześledzę kod, zapiszę podczas ładowania pluginu i napiszę wam mój wynik.
anon10657637 | 2017-04-23 17:29:12 UTC | #22
@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.
RabbitTheDEV | 2018-01-02 13:10:28 UTC | #23
Ł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!”);
DoreK | 2018-01-02 13:48:19 UTC | #24
Drugi raz Ci to pokazuję:
RabbitTheDEV | 2018-01-02 13:51:46 UTC | #25
Ah no tak, ale nie zaszkodzi napisać.
IceMelt | 2018-01-02 14:31:15 UTC | #26
Tyle, że już kod też zniknął na hastebinie ;d
system | 2021-02-17 10:25:57 UTC | #27
Ten temat został automatycznie zamknięty 32 dni po ostatnim wpisie. Tworzenie nowych odpowiedzi nie jest już możliwe.