Problem z wczytaniem wiadomości z configu

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

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");

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

OnTopic:

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ę:
image|276x57


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.