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 pisaniem pluginu


Rekomendowane odpowiedzi

Opublikowano

Witam. Piszę plugin na serwer 1.12.2. W pluginie chcem zaimplementować przeładowywanie cfg{3 pliki}. Tylko jak narazie udało mi się zrobić przeładowywanie w czasie rzeczywistym lub jeżeli chciałem to przerzucić pod komende to to nie chciało działać chociaż nie było żadnego błędu w konsoli. Robię to w osobnej klasie nie w main pluginu poprostu dla wygody.

Opublikowano

Z tym czy obiekt nie ma żadnych danych nie mogło być bo poprostu plugin mi nie wczytywał nowych ustawień jedynie zostawały stare.

Wyśle kod może ty się czegoś doszukasz bo jak narazie mam w nim zero błędów według eclipsa

package PhantomBase.fileMeneger;

import java.io.File;
import java.io.IOException;

import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;

import PhantomBase.KRZYSZT0FSLENDER.main.PhantomBase;

public class FileMeneger{
	
	private PhantomBase plugin = PhantomBase.getPlugin(PhantomBase.class);
	
	private File messegesfile = new File(plugin.getDataFolder(), "messeges.yml");
	public FileConfiguration messegescfg = YamlConfiguration.loadConfiguration(new File(plugin.getDataFolder(), "messeges.yml"));
	private File basecfg = new File(plugin.getDataFolder(), "config.yml");
	public FileConfiguration basecfgdata = YamlConfiguration.loadConfiguration(basecfg);
	private File playerlistcfg = new File(plugin.getDataFolder(), "playerlist.yml");
	public FileConfiguration playerlistcfgdata = YamlConfiguration.loadConfiguration(playerlistcfg);
	
	public void SaveFiles() {
		
		if(!messegesfile.exists()) {
			plugin.saveResource("messeges.yml", false);
		}
		
		if(!basecfg.exists()) {
			plugin.saveResource("config.yml", false);
		}
		
		if(!playerlistcfg.exists()) {
			try {
				playerlistcfg.createNewFile();
			} catch (IOException e) {
				// TODO Auto-generated catch block
			}
		}
		
	}
	
	public FileConfiguration getConfig() {
		return basecfgdata;
	}
	
	public FileConfiguration getMesseges() {
		return messegescfg;
	}
	
	public FileConfiguration getPlayersList() {
		return playerlistcfgdata;
	}
	
}

 

Opublikowano

private File messegesfile = new File(plugin.getDataFolder(), "messeges.yml");

public FileConfiguration messegescfg = YamlConfiguration.loadConfiguration(new File(plugin.getDataFolder(), "messeges.yml"));

?? czemu najpierw robisz obiekt File po czym go robisz na nowo ??
public FileConfiguration messegescfg = YamlConfiguration.loadConfiguration(messegesfile ));

 

po grzyba inicjuesz zmienne przed konstruktorem ??

public FileConfiguration messegescfg = YamlConfiguration.loadConfiguration(new File(plugin.getDataFolder(), "messeges.yml")); ??????????????????

ogolnie taki fragment kodu to pasuje do metody "load"/"reload"

 

 

public void SaveFiles()  to nie dziala tak jak myslisz ....

https://hub.spigotmc.org/javadocs/spigot/org/bukkit/plugin/Plugin.html#saveResource-java.lang.String-boolean-

ty chcesz zapisac jesli go nie ma oraz przeladowac / wczytac jesli jest

ale ok przeanalizujmy sobie ten kod

public void SaveFiles() { if(!messegesfile.exists()) { plugin.saveResource("messeges.yml", false); }

public void SaveFiles() {  //metoda 
		if(!messegesfile.exists()) { //jesli plik nie istnieje
			plugin.saveResource("messeges.yml", false); // wczytaj z [plugin].jar plik o nazwie "messages.yml" , i 
												jesli (drugi parametr == true) skopiuj lub nadpisz plik 
												jesli (drugi parametr == false) skopiuj plik tylko gdy on nie istnieje

 

https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/configuration/file/YamlConfiguration.html#loadConfiguration-java.io.File-

robisz metode load , ktora to wczytuja te pliki ,
robisz metode save ktora to zapisze config
 

moge sie zalorzyc ze nawet nie otworzyles api

 

 

jesli tworzysz foler to mozesz dac tak File.mkdir/'s
https://docs.oracle.com/javase/7/docs/api/java/io/File.html#mkdir()

Opublikowano
10 godzin temu, damianq20 napisał:

private File messegesfile = new File(plugin.getDataFolder(), "messeges.yml");

public FileConfiguration messegescfg = YamlConfiguration.loadConfiguration(new File(plugin.getDataFolder(), "messeges.yml"));

?? czemu najpierw robisz obiekt File po czym go robisz na nowo ??
public FileConfiguration messegescfg = YamlConfiguration.loadConfiguration(messegesfile ));

 

po grzyba inicjuesz zmienne przed konstruktorem ??

public FileConfiguration messegescfg = YamlConfiguration.loadConfiguration(new File(plugin.getDataFolder(), "messeges.yml")); ??????????????????

ogolnie taki fragment kodu to pasuje do metody "load"/"reload"

 

 

public void SaveFiles()  to nie dziala tak jak myslisz ....

https://hub.spigotmc.org/javadocs/spigot/org/bukkit/plugin/Plugin.html#saveResource-java.lang.String-boolean-

ty chcesz zapisac jesli go nie ma oraz przeladowac / wczytac jesli jest

ale ok przeanalizujmy sobie ten kod

public void SaveFiles() { if(!messegesfile.exists()) { plugin.saveResource("messeges.yml", false); }


public void SaveFiles() {  //metoda 
		if(!messegesfile.exists()) { //jesli plik nie istnieje
			plugin.saveResource("messeges.yml", false); // wczytaj z [plugin].jar plik o nazwie "messages.yml" , i 
												jesli (drugi parametr == true) skopiuj lub nadpisz plik 
												jesli (drugi parametr == false) skopiuj plik tylko gdy on nie istnieje

 

https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/configuration/file/YamlConfiguration.html#loadConfiguration-java.io.File-

robisz metode load , ktora to wczytuja te pliki ,
robisz metode save ktora to zapisze config
 

moge sie zalorzyc ze nawet nie otworzyles api

 

 

jesli tworzysz foler to mozesz dac tak File.mkdir/'s
https://docs.oracle.com/javase/7/docs/api/java/io/File.html#mkdir()

 

To w jaki sposób musiałbym przerobić ten skrypt aby ta komenda mogła zadziałać i co do tego z saveResource wiem jak ona działa i jak narazie działa to działa bez błędnie i w ten sposób o jaki mi chodziło mi zależy tylko aby działało przeładowanie. Napisałeś 

Cytat

jesli tworzysz foler to mozesz dac tak File.mkdir/'s
https://docs.oracle.com/javase/7/docs/api/java/io/File.html#mkdir()

Tylko jest taki jeden mały problem w tej klasie nie tworze żadnego folderu wszystko to są pliki z rozszerzeniem ".yml" żaden z nich nie wymaga tego abym stworzył go za pomocą mkdir

Opublikowano

aA faktycznie nie zwróciłem uwagi ze to nie jest folder , wiec masz racje "createNewFile()"

no musisz na nowo wczytac config :l . ty to robisz zawsze przed konstruktorem , zrob sobie w metodzie po czym skorzystaj z niej w komendzie czy gdziekolwiek tam chcesz

 

public FileConfiguration messegescfg = YamlConfiguration.loadConfiguration(new File(plugin.getDataFolder(), "messeges.yml"));

takie cos poza klamerkami metod/konstruktorow wykonuje sie ZAWSZE przed konstruktorem , i to jest blad (choc niekoniecznie , ale w tym przypadku tego nie chcemy) chcemy natomiast aby to sie wykonalo w metodzie

Opublikowano
2 minuty temu, damianq20 napisał:

aA faktycznie nie zwróciłem uwagi ze to nie jest folder , wiec masz racje "createNewFile()"

no musisz na nowo wczytac config :l . ty to robisz zawsze przed konstruktorem , zrob sobie w metodzie po czym skorzystaj z niej w komendzie czy gdziekolwiek tam chcesz

 

public FileConfiguration messegescfg = YamlConfiguration.loadConfiguration(new File(plugin.getDataFolder(), "messeges.yml"));

takie cos poza klamerkami metod/konstruktorow wykonuje sie ZAWSZE przed konstruktorem , i to jest blad (choc niekoniecznie , ale w tym przypadku tego nie chcemy) chcemy natomiast aby to sie wykonalo w metodzie

 

Dobrze zrobię to w taki sposób jak mówisz, a i tak wogóle nie w komendzie ale w listener'ze bo to ma wyswietlac wiadomość na wejściu a komenda jest tylko dodatkiem aby nie było trzeba bez przerwy bukkit:/rl 

 

Opublikowano

taka tylko drobna uwaga WSZYSTKIE operacje I/O (a tym jest wczytanie danych z cfg czyli YmlConfig.load / config.save) powinny byc robione w osobnym watku !!! (mozna to pominac jedynie przy onEnable bo tam to jedynia wplywa na czas uruchamiania serwera.

 

mam tylko nadzieje ze nei wczytujesz tych 3 plikow za kazdym razem na nowo przy kazdorazowym wejsciu gracza

 

Opublikowano
3 minuty temu, damianq20 napisał:

taka tylko drobna uwaga WSZYSTKIE operacje I/O (a tym jest wczytanie danych z cfg czyli YmlConfig.load / config.save) powinny byc robione w osobnym watku !!! (mozna to pominac jedynie przy onEnable bo tam to jedynia wplywa na czas uruchamiania serwera.

 

mam tylko nadzieje ze nei wczytujesz tych 3 plikow za kazdym razem na nowo przy kazdorazowym wejsciu gracza

 


nie żadnego z nich nie wczytuje ponownie przy wjesciu gracz poprostu pobieram odpowiednie dane z cfg {1 boolean} i z messeges{2 wiadomości}.

Jezeli dobrze zauważyłem one są wczytane do pamięci ram serwera poprostu wystarczy pobrać dane z nich
 

  • 4 tygodnie później...
Opublikowano

@damianq20 jest mała sprawa bo jak zaczęło grać z tymi reloadami to nagle podpięcie klasy main pluginu przestało działać 

private WhiteListCore plugin = WhiteListCore.getPlugin(WhiteListCore.class);

wogóle nie moge tego podpiąć mam problem z całym projektem tego pluginu. 
Na reload cfg zrobiłem jak radziłeś i to wszystko działało gdy nagle przeładowałem plugin 5 razy ito padło

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...