Skocz do zawartości

kerpson

Użytkownik
  • Ilość zawartości

    1852
  • Rejestracja

  • Ostatnia wizyta

  • Wygrane w rankingu

    44

Treść opublikowana przez kerpson

  1. A ja wypowiem się na temat samego kodu. 1. Brak rozdzielenia danych funkcji na klasy, powinieneś operować na wielu klasach, to znaczy, żeby dla eventów robić oddzielne klasy. Pozwoli to zachować czystość kodu. 2. Żywcem pobierane dane z configu podczas wykonywania akcji. Nie jest to dobry sposób, gdyż w przypadku większej ilości osób plik z automatu będzie większy co dodatkowo zwiększy czas czytania z niego danych. Lepiej przechowywać te dane w objekcie a potem je tylko ewentualnie zapisywać. Dodatkowo przy interakcji zapisujesz cały config. 3. Ten fragment bardzo mi się nie podoba. File configFile = new File(getDataFolder(), "config.yml"); if (!configFile.exists()) { try { configFile.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } config = YamlConfiguration.loadConfiguration(configFile); Jeżeli plik się nie stworzy powinieneś wyłączyć plugin, wysłać informację za pomocą loggera o błędzie. 4. Przed castowaniem powinieneś sprawdzić czy osoba, która kliknęła to na pewno jest gracz. Player player = (Player) event.getWhoClicked(); Mimo wszystko tragedii nie ma i życzę powodzenia w dalszym kodowaniu.
  2. kerpson

    Zmiana javy

    Aczkolwiek najlepiej korzystać z nowszych :d np. gdy robi się serwer na 1.16 i ktoś chce korzystać z fawe(fazy async world edit) musi używać siła rzeczy Javy 17
  3. kerpson

    Zmiana javy

    Nie, nie musi. Nawet na javie 17 mógłby odpalić minecrafta 1.16, to kwestia dodania odpowiedniej flagi do skryptu startującego. Co Można używać wyższych wersji javy, aczkolwiek 8 jest taka uniwersalna
  4. To nic skomplikowanego. 1. Wrzucasz schemat do folderu FunnyGuilds 2. W pliku 'config.yml' znajdujesz sekcję z sercem gildii, ustawiasz na schemat i wpisujesz nazwę tego schematu. 3. Restartujesz serwer i tyle. I jedna uwaga. Jeżeli chcesz to robić na wersji 1.8.8 to nie używaj pluginu fawe, tylko zwykłego worldedita, gdyż na fawe wklejanie schematu jest lekko zbugowane.
  5. velocity + limbofilter - darmowe, najlepsze
  6. Spróbuje się dowiedzieć o co chodzi, ale szczerze nigdy się z czymś takim nie spotkałem, używam FAWE od lat i zero zastrzeżeń.
  7. kerpson

    Problem z czatem

    Pokaż kod
  8. Dziwne bo jeszcze nie dawno tak polecałeś bloom.host jako najlepszy hosting, a już jednak nie. Czekaj czekaj, ja może o czymś nie wiem ale od kiedy FAWE psuje świat tak btw? Co do tematu, to można zauważyć, że Citizens pobiera aż 16% cpu, czyli coś tu jest nie tak
  9. kerpson

    Problem z czatem

    Czemu zamiast korzystać z 1 zmiennej w jakimś managerze to używasz 2 osobnych? Gdybyś użył normalnie jednej nie było by problemu. A czemu jest ten problem? if(!ChatOffBlock.muted == false || !ChatOnBlock.muted == false) { Ponieważ zawsze jedna z tych zmiennych jest false
  10. Ja i polecę od siebie bibliotekę pod configi: https://github.com/OkaeriPoland/okaeri-configs Lub jeżeli wolisz po prostu mieć to swoje: https://www.spigotmc.org/wiki/config-files/#using-custom-configurations
  11. messages.yml tam jest to do zmiany
  12. Witam, z tej strony kerpson i planuję otwarcie własnej ekipy, która zajmowała by się tworzeniem serwerów. Tworzeniem serwerów łącznie zajmuję się już 6 lat. Przez ten czas zebrałem sporo doświadczenia i umiejętności. Planuję otwarcie projektu, którym by była ekipa zajmująca się ową profesją. Kogo poszukuję? Przede wszystkim poszukuję osób nie tylko tych doświadczonych ale także takich, które się rozwijają, mają chęci i będą chętne nabyć nowe umiejętności. Wstępnie zainteresowany byłbym osobami, które: - potrafią pisać pluginy - potrafią tworzyć paczki pluginów pod każdy typ serwera - potrafią stawiać serwery na maszynach wirtualnych (VPS) - potrafią konfigurować serwery pod wieloma kątami Czego wymagam? Niezależnie od stanowiska, wymagam umiejętności pracy w grupie, umiejętności gospodarowania czasem i pracy w określonych terminach oraz sumienności. A teraz szczegółowo: Programista: 1. Umiejętności pisania pluginów minimalnie na poziomie średnim 2. Możliwości pokazania przykładowych kodów 3. Stosowania się do zasad czystego/schludnego kodu, poprawnego nazewnictwa 4. Umiejętności pracy z "multi-modułami" 5. Podstawowej znajomość i obsługi GitHuba Osoba tworząca paczki pluginów: 1. Umiejętności tworzenia paczek pod każdy tryb 2. Porządnej konfiguracji pluginów 3. Znajomości aktualnie najlepszych, najoptymalniejszych rozwiązań pod wymogi klienta 4. Kreatywności 5. Możliwości pokazania stworzonej przez siebie przykładowej paczki Co oferuję? To co wszyscy lubią najbardziej, czyli pieniądze. Jakby to wyglądało? Przykładowo dostajemy zlecenie na plugin gdzie stawka wynosi 600zł. W przypadku jeżeli projekt robimy w 2 osoby, to dzielimy się zarobkiem 50/50, czyli 300zł dla osoby X. W tej sytuacji jest to wynagrodzenie od zlecenia. Na początku nie ma co liczyć na ogromne zarobki, gdyż to będzie dopiero początek, ale z biegiem czasu biorąc pod uwagę rozwój zarobki będą się zwiększać. W sytuacji, gdy wypuszczamy jakiś większy plugin do sprzedaży chociażby na portalu typu: spigotmc, mcmarket itp. osoby, które pomagały w projekcie będą otrzymywać miesięczne wynagrodzenie zależne od ilości sprzedaży pluginu. Czyli przykładowo, jeżeli wystawię plugin za 20$, w ciągu miesiąca zyski będą wynosić 200$ (około 1000zł) to dzielimy się również po równo(to też będzie zależeć co kto robił w projekcie ale celem będzie, aby każdy wykonał w miarę równą pracę). Wynagrodzenie wtedy będzie co miesięczne. Dodatkowa informacja Należąc do ekipy, nie będę miał problemu jeżeli osoba będzie dalej działać sobie indywidualnie bądź w innych projektach. Jedyne czego będę wymagał to odpowiedniego gospodarowania czasu, aby w przypadku potencjalnego zlecenia być w gotowości. Jeżeli jesteś wstępnie zainteresowany, napisz do mnie wiadomość na forum lub najlepiej na discordzie (kerpson#7066). W wiadomości napisz mi: kim chciałbyś być w ekipie, swoje doświadczenie, ile czasu tym się zajmujesz, swoje prowadzone/zrealizowane projekty oraz jakiekolwiek portfolio. Jeżeli uznam cię na odpowiednią osobę, to będę na bieżąco informować cię o postępach projektu.
  13. co ty gadasz XD a mctorch? mcrust? Największym plusem jest nowa wersja gry, więcej możliwości.
  14. Nawiązałem do tego na marginesie, po prostu aż ciężko się na to patrzy, bajzel i raczej każdy kto ma jakiekolwiek pojęcie o "clean code" mnie zrozumie... No wiesz, osoby nieporadne życiowo będą pisać, Intelli ma wbudowaną funkcję tworzenie getterów i setterów jednym skrótem klawiszowym, ale lombok i tak rządzi. Tak jak wspomniałem, redisa chociażby ja bym głównie używał tylko i wyłącznie do przekazywania informacji miedzy serwerami
  15. Redis głównie służy do szybkiego przekazywania danych, lepiej takie zapisy trzymać np. w mysql, mariadb lub co tam preferujesz. Wiadomo, kod słaby, a nawet bardzo, ale tak można tak przekazywać dane. RMap<String, String> kits nwm po co to, do przekazywania informacji w redisie dosyć prostych powinna się tylko interesować funkcja publish/subscribe. rTopic.publishAsync(serverName + "XXX" + player.getUniqueId().toString() + "XXX" + k + "XXX" + l); Nie musisz się też bawić tak, możesz po prostu zrobić sobie tablicę Object np. Object[] kitObject = new Object[ilosc wartosci]; kitObject[0] = serverName; kitObject[1] = cos tam itp itp; //a potem publikujesz ten objekt, a przy subscribe nasluchujesz tego Ja np. tak to robie RTopic topic = this.client.getTopic("Channel"); Object[] values = new Object[4]; values[0] = bababa; values[1] = uuuu; values[2] = tadadd; values[3] = gdgfgfd; topic.publish(values); a odczytuje to tak topic.addListenerAsync(Object[].class, (message, values) -> { String adads = (String) values[0];
  16. kerpson

    Protocollib

    Bo zapewne nie robicie restartów tylko zwykłe przeładowania
  17. Zacznę od klasy TradeUtil: public void removeTrade(final Trade trade) { final ArrayList<Trade> trades = new ArrayList<Trade>(); for (final Trade t : this.tradeList) { if (!t.getRequester().getName().equalsIgnoreCase(trade.getRequester().getName()) || !t.getAccepter().getName().equalsIgnoreCase(trade.getAccepter().getName())) { trades.add(t); } } this.tradeList = trades; } Uważam to za bezsensowne, od javy 8 i wyżej możesz użyć dla listy funckji removeIf ewentualnie usuwać za pomocą Iteratora public Trade getTradeFromRequester(final Player requester) { Trade trade = null; for (final Trade t : this.tradeList) { if (t.getRequester().getName().equalsIgnoreCase(requester.getName())) { trade = t; } } return trade; } ta zmienna Trade jest bezcelowa, mimo, że znajdujesz danego trade to i tak sprawdza ci całą listę od początku do końca, po co? //Przykład for (Trade trade : tradeList) { if (//tutaj warunek jaki chcesz mieć aby zwrócic trade) { return trade; } } return null; Lecimy do klasy Trade: Main plugin; Player tradeRequester; Player tradeAccepter; Inventory requesterInventory; Inventory accepterInventory; Pamiętaj, żeby po zakończeniu wymiany te objekty ustawić jako null, bo takie bezcelowe przetrzymywanie ich jest niepoprawne. public void startTimeOutCounter() { new BukkitRunnable() { int seconds = 0; public void run() { if (!Trade.this.isCancelled()) { if (this.seconds < 15) { if (!Trade.this.tradeRequester.isOnline() || !Trade.this.tradeAccepter.isOnline() || !Trade.this.tradeRequester.getWorld().getName() .equalsIgnoreCase(Trade.this.tradeAccepter.getWorld().getName()) || (Trade.this.tradeRequester.getLocation().distance(Trade.this.tradeAccepter .getLocation()) > Trade.this.plugin.getConfig().getDouble("Distance") && Trade.this.plugin.getConfig().getDouble("Distance") >= 0.0)) { Trade.this.cancelTrade(true); this.cancel(); } if (Trade.this.isTradeAccepted()) { this.cancel(); } } else { Trade.this.cancelTrade(true); this.cancel(); } ++this.seconds; } else { this.cancel(); } } }.runTaskTimer((Plugin) this.plugin, 20L, 20L); Nwm czy to ma w ogóle jakiś sens, po wyjściu graczy podczas wymiany można po prostu ją anulować chyba, że bardzo zależy ci na tym dystansie Ciągle pobierasz żywcem z configu zmienne, czy nie lepiej zrobić klasę typu TradeConfiguration i tak trzymać wszystkie już wczytane zmienne a potem ich tylko używać? Klasa Main: this.getServer().getPluginManager().registerEvents((Listener)this, (Plugin)this); Ten cast jest niepotrzebny Trade trade = this.tradeUtil.getTradeFromAccepter(p); trade.setTradeAccepted(true); this.tradeUtil.addTrade(trade); trade = null; Nie musisz ustawiać trade na null, GC go zbierze jeżeli będzie uznany za niepotrzebny. Nie oceniałem już samego kodu, tylko wstępną wydajność, wydaje mi się, że to co napisałem wystarczy ale niech jeszcze inne osoby się wypowiedzą. Ale generalnie tak na marginesie kod straszny, musisz nad tym popracować bo on w ogóle jest słabo czytelny
  18. Najlepiej by było, tego typu pytanie bez kodu nie ma najmniejszego sensu, jak mamy ci pomóc...
  19. Z tego co dobrze pamiętam to funkcja anulowania eventu i zamieniania typu bloku na air wygląda dosyć "sztucznie", imo lepiej użyć block.breakNaturally(new ItemStack(Material.AIR));
  20. Najlepiej użyj zwykłego papera, uważam, że to będzie najlepszy wybór
  21. Trochę w swojej wypowiedzi to sobie sam zaprzeczasz: A w kolejnym zdaniu: Nie napisałeś, że i3 i dobra karta, napisałeś tylko że przy lepszym procku nie musisz mieć dobrej karty, a sam autor podkreśla, że jest zielony pod kątem doboru podzespołów więc zgaduje, że nie ma o nich zbytnio pojęcia, czyli podsumowując: skąd ma wiedzieć, że do i3 dobra karta a po i5 już nie trzeba dobrej? Dla autora: jeżeli kupujesz nowego kompa, to polecam ci zainwestować nieco więcej i kupić sobie już porządny sprzęt i nie zamykać się tylko na grę minecraft, bo nie wiadomo czy za miesiąc, rok twoje priorytety się nie zmienią.
  22. Skąd ty to wziąłeś XD Posiadam aktualnie i3 w laptopie, i że tak powiem shadery medium działają na 40-50fps na małym ekranie, na monitorze to już nie ma co mówić.
  23. Nie chcę mi się wierzyć, że przy tym błędzie nie ma błędu w konsoli Sprawdź dokładnie, ostatnie linijki po wpisaniu komendy
  24. logiiii
  25. No i to jest fajne wytłumaczenie, warto również wspomnieć, że po prostu pluginy mają więcej funkcji/metod i ogólnie możliwości(chodź na dzień dzisiejszy z aktualnymi dodatkami do Skripta jest tego co raz więcej). Bardzo dziecinne podejście wrzucanie wszystkich do jednego worka, wiele osób grało na tego typu serwerach i są normalnymi osobami, to już jest po prostu kwestia charakter/osobowości. To tak samo jak by powiedzieć, że wszystkie roczniki >= 05 są patologiczne. Dobrze napisany skrypt będzie lepszy od źle napisanego pluginu, tyle. Z resztą z ciekawości pobierałem kiedyś te pluginy z youtube aby sprawdzić kod (różnego typu, jakieś osiągnięcia, vanishe itp) i osobiście odradzam pluginy od takich tworów, syf kod i tyle w temacie. Dodatkowo co do "nie są trudne", jeżeli robisz je na "odpierd0l" to faktycznie nie jest to aż takie trudne, trudne to się zaczyna robić gdy wtyczka ma być napisana zgodnie według zasad i norm, również aby była optymalna. Czy są wydajne to zależy od tego jak są stworzone, sam skript zajmuje mało miejsca ale im więcej chcesz mieć możliwości to tym więcej dodatków musisz posiadać do nich.
×
×
  • Dodaj nową pozycję...