Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Problem z pluginem


KRZYSZT0FSLENDER

Rekomendowane odpowiedzi

Opublikowano

Witam mam taki mały problem bo piszę plugin na whitelist. Zrobiłem właśnie wczytywanie danych z plików konfiguracyjnych ale wywala błąd że dane w cfg są równe null i wiem z czego to wynika ale nie wiem jak to naprawić dokładnie. Problemem jest to mimo iż inicjuje wczytanie sie pliku to i tak serwer wczytuje go tylko podczas włączania pluginu a później usuwa dane z pamięci ram. 

Prosze o to kod
Menedżer plików 
 

public class FileMenager {

	public WhiteList pl = WhiteList.getPlugin(WhiteList.class);
	
	public File cfgFile;
	public File msgFile;
	public YamlConfiguration cfgData;
	public YamlConfiguration msgData;
	
	public void CheckFileExist() {
		if(!pl.getDataFolder().exists()) {
			pl.getDataFolder().mkdir();
		}
		
		cfgFile = new File(pl.getDataFolder(), "config.yml");
		if(!cfgFile.exists()) {
			pl.saveResource("config.yml", true);
		}
		
		msgFile = new File(pl.getDataFolder(), "messages.yml");
		if(!msgFile.exists()) {
			pl.saveResource("messages.yml", true);
		}
	}
	
	public void LoadFiles() {
		Bukkit.getConsoleSender().sendMessage("§2Test");
		cfgFile = new File(pl.getDataFolder(), "config.yml");
		cfgData = YamlConfiguration.loadConfiguration(cfgFile);
		
		msgFile = new File(pl.getDataFolder(), "messages.yml");
		msgData = YamlConfiguration.loadConfiguration(msgFile);
	}
	
	public void ReloadFiles() {
		cfgFile = new File(pl.getDataFolder(), "config.yml");
		cfgData = YamlConfiguration.loadConfiguration(cfgFile);
		
		msgFile = new File(pl.getDataFolder(), "messages.yml");
		msgData = YamlConfiguration.loadConfiguration(msgFile);
	}
	
	public void ResetConfigFiles() {
		if(!pl.getDataFolder().exists()) {
			pl.getDataFolder().mkdir();
		}
		pl.saveResource("config.yml", true);
		pl.saveResource("messages.yml", true);
	}
}


testowej komendy którą sprawdzam to czy działa
 

public class WhiteListCommand implements CommandExecutor{
	
	private FileMenager fm;

	public boolean onCommand(CommandSender sender,Command cmd,String arg,String[] args) {
		
		if(cmd.getName().equalsIgnoreCase("whitelist")) {
			String test = fm.cfgData.getString("test.test");
			sender.sendMessage("§2" + test);
		}
		
		return true;
	}
	
}


oraz kod klasy main która rejestruje komende
 

public class WhiteList extends JavaPlugin{

	private FileMenager fm;
	
	public void onEnable() {
		setUpConfig();
		getCommand("whitelist").setExecutor(new WhiteListCommand());
	}
	
	public void onDisable() {
		
	}
	
	public void setUpConfig() {
		Bukkit.getConsoleSender().sendMessage("§2Test");
		fm = new FileMenager();
		fm.CheckFileExist();
		fm.LoadFiles();
		/*To na dole dodałem tylko po to aby zobaczyć czy zadziała ale nic to nie dało*/
		
		//fm.cfgFile = new File(this.getDataFolder(), "config.yml");
		//fm.cfgData = YamlConfiguration.loadConfiguration(fm.cfgFile);
		
		//fm.msgFile = new File(this.getDataFolder(), "messages.yml");
		//fm.msgData = YamlConfiguration.loadConfiguration(fm.msgFile);
	}
	
	public void setUpMysql() {
		
	}
	
}

 

Opublikowano
public File cfgFile;
public File msgFile;
public YamlConfiguration cfgData;
public YamlConfiguration msgData;

Zmień to na private, zmień klasę na obiekt.

 

@edit Ty tam nawet nie masz metody FileManager() w tym file managerze


@edit2 Dodatkowo, w tym config.yml czy w tym, co tam sprawdzasz pod komendą, musi być wpisane coś takiego, co wyciągasz.

Przykład:

Chcesz wyciągnać jakiś string, który jest tutaj - "test.test"

To  w pliku musi być coś takiego:

test:
  test: "TEST"

Jeśli tego nie będzie, to będzie wywalać błąd.

 

@edit3 I jak Ty chcesz wyciągnąć string w komendzie, skoro zrobiłeś nową "instancję", która nie została stworzona?

Zmień w klasie głównej FileManager na static.

W klasie z komendą zrób coś takiego:

private FileManager fm = WhiteList.fm; - albo coś podonego. Bo to tutaj właśnie stworzyłeś to, co chciałeś.

 

@edit4 Sprawdź @edit3 i powodzenia w pisaniu pluginów.

Opublikowano

1. Wyjaśnij dokładniej o co ci chodzi z tą metodą
2. config jest zrobiony w dokładnie taki sposób jak powiedziałeś
3. Faktycznie nie dałem static.

 

Tu odrazu mówie żeby nie było później że nie znam javy czy czegoś takiego. Ja uczyłem się tylko i wyłącznie html, css, php, JS a tym się zajołem bo kolega chciał otworzyć sieć serwerów a plugin pisze bo ta whitelist'a co jest w bukkicie poprostu jest do d*** .

 

Jednak wszystko działa ustawilem wszystkie te zmienne public co są w file menegerze na static i teraz to działa bez problemu

Opublikowano

Ogarnij tylko tę klase filemanager jako obiekt i zrób w tym WhiteListCommand to, co napisałem wyżej.

W tej klasie, co masz komendę, musisz wyciągnąć obiekt FIleManager z klasy WhiteList.

  • Rayzer. zablokował(a) ten temat

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...