Nie polecam na większe serwery
@edit mam juz troche czasu wiec sprobuje ci pomóc "udoskonalić" troche ten plugin
Dodaj wsparcie dla innych wersji - nie wiem jak to zrobisz - albo refleksje albo dla każdej wersji rob oddzielnie implementacje z nms. (tzn. interfejs pingchecker i np. pingchecker_1_8_r3 implementacja z uzyciem nms od 1.8.8)
Jezeli chodzi o kod (raczej ten "slabo napisany")
public static Main inst;
public static Main getInstance() {
if (inst == null) {
return new Main();
}
return inst;
}
public void onEnable(){
inst=this;
Szkoda ze nie wiesz jak to dziala =(
Gdy instancja jest nullem to tworzysz nawet tysiące takich obiektów (jak tysiac razy zostanie wywolana metoda getinstance() przed wywolaniem metody onEnable())
zamiast zwracac niepotrzebnie nowy obiekt zrob return inst = new Main() lub od razu zrob cos w stylu getPlugin(Main.class) bo przeciez jest juz taka metoda w JavaPlugin.
new Task().runTaskTimerAsynchronously(this, 1L, 1L);
No i po co puszczac takiego taska co 1 ticka? Skoro mozna co kilka sekund
Czemu zapisujesz config w onEnable?
Klasa "Ping"
public Ping(final Main plugin){
this.plugin = plugin;
this.plugin.getCommand("ping").setExecutor(this);
}
Czemu rejestrujesz komende w konstruktorze? Taska mogles puscic juz normalnie, ale komendy tak samo rejestrowac nie mozesz .. =( to sie nazywa side-effects (zla praktyka, nie rob tak)
UserManager.setPingPowiadomienia(p.getName(), 1);
Czemu usermanager i set jest po angielsku a pingpowiadomienia juz po polsku? To jakas nowa moda na mieszanie angielskiego z polskim, czy po prostu nie wiedziales jak sa powiadomienia po angielsku? =(
args.length == 0 || (args.length > 1)
Od czego to jest?
UserManager.setPingPowiadomienia(p.getName(), 0);
Czemu zamiast uzywac booleana - true/false to jest 1 albo 0? Od tego sa booleany =(
jak zwracasz false w onCommand to informujesz serwer ze komenda nie wykonala sie prawidlowo
Paczek nie nazywa sie w liczbie mnogiej i nie rob takich skrótow =( zamiast cmds to command, zamiast utils to util.
Powiedzmy ze chce zedytowac twoj plugin - widze ze w mainie jest klasa Ping - ale g*wno jest napisane co to jest. Czy to komenda czy to zwykly obiekt =/
Masz paczkę tasks a w niej klasa Task xD to albo robisz tą paczke aby tam przechowywac rozne taski albo jeden ktory nic konkretnie nie mowi o tej klasie - po prostu Task. I skąd ktoś ma wiedzieć od czego ta klasa jest? Np. z nazwy "PingCheckerTask" wiadomo od czego to jest - ping checker task. Sprawdza ping i do tego jest taskiem.
Do tego metode getPing trzymasz w dwóch klasach (duplicated code)
Czemu paczka util zawiera klase Api? I wgl czemu to sie nazywa api? Api do mogloby byc gdybys cos dostarczal ze swojego pluginu dla innych pluginow.. Np ile razy gracz mial zbyt duzy ping lub cos w tym stylu. Do tego to powinien byc obiekt a nie klasa statyczna z wysylaniem title/subtitle. Jak juz to moglbys to dac gdzies indziej lub od razu nazwac TitleUtil lub coś w tym stylu (ja na twoim miejscu tez bym zrobil interfejs titlesender i implementacja dla 1.8.8 itp) Wiecej czytac mi sie nie chce, nie mam czasu xd