Skocz do zawartości

yooniks

Użytkownik
  • Ilość zawartości

    987
  • Rejestracja

  • Ostatnia wizyta

  • Wygrane w rankingu

    13

Treść opublikowana przez yooniks

  1. wiec moze zmien to na liczbe? przykladowo 20 (dla jedzenia chyba tyle jest, bo 1 to 0.5 tego 'jedzenia')
  2. if (!Chat.chat) { } ? Do tego: bukkit ma swoja metode od kolorowania wiadomosci: ChatColor.translateAlternateColorCodes('&', text); No i oczywiscie warto tez wspomniec ze nowe linie mozesz tworzyc w zwyklym stringu uzywajac "\n" (no i mozna tez innymi sposobami, ale teraz nie bede tlumaczyl), i wtedy mozesz wyslac po prostu jeden string wygladajacy mniej wiecej tak: my-message: "first line \n second line" a wiadomosc bedzie wygladac tak: first line second line oraz: mozesz to zastapic w prosty sposob: for (int i = 0; i < 101; i++) { //czyszczenie czatu } + bukkit.broadcast bedzie ci spamilo w konsoli oraz logach, slaby pomysl no i oczywiscie wspomne o tym ze zamiast wykonywac 100 razy metode dla jednego gracza [czyli byloby to np. 1000 metod jak byloby 10 graczy (chyba)], to mozesz wyslac po prostu ogromny znak do kazdego gracza, ktory zastapi wykonywanie tej petli. private char[] chars; protected void init() { Arrays.fill(chars = new char[7680], ' '); } no i wysylasz uzywajac: player.sendMessage(String.valueOf(this.chars)); (ogolnie to slaba nazwa dla takiego fielda, zmien sobie) - no i oczywiscie ten pomysl nie jest moj, ktos gdzies to pisal kiedys na discordach i po prostu podczas nauki podlapalem to.
  3. Zmien modyfikator dostepu na public/protected i metode createCosTam zrób statyczną, wtedy bedziesz mogl odwolac sie do niej z innej klasy, tylko jeszcze przed otworzeniem takiego inventory lepiej zamknij stare inventory (player.closeInventory();) - bo nie wiem co sie stanie jak bedziesz mial otwarte jedno, a sprobujesz otworzyc drugie - raczej nic sie nie stanie, no ale lepiej zamykac. no i co do samego kodu: inventory moze byc nullem - gdy gracz kliknie poza gui - sprawdzaj takie cos, tak samo item - moze byc nullem lub jego nazwa/itemmeta - tez cos z tym rob. No i skoro nigdzie nie wrzucasz do inventory nicku gracza, czy cos w tym stylu (np. w lore od itemu) to takie inventory moze byc zapisane w fieldzie i pozniej mozesz sie do niego odwolywac, np: p.openInventory(this.someInventory);, "if (e.getInventory().getTitle().equalsIgnoreCase(this.someInventory().getTitle()) ..."
  4. od tego masz takie cos jak 'zglos' i moderacja forum sie tym zajmie = ) co do tematu: - czego wyczekujesz (lepiej opisz) - czy programista ktory pisze dosc zaawansowane pluginy, czy wystarczy ci poczatkujacy - do czego (jaki projekt chcesz stworzyc) - wynagrodzenie itd.
  5. "ayyy" a te proxy bylo pisane bardzo dawno, co mozna nawet zobaczyc jak dziele paczki - "objects", "enums" - no to była porażka, poza tym projekty do oceniania na dzien dzisiejszy masz u mnie na githubie, wiec dawanie ssow z luytena, tymbardziej projektu ktory jest porzucony i pisany dawno (tymbardziej ze jest do darkproxy, a nie casualproxy - ktore mialo publiczny kod) - no idiotyzm = ) kazdy kiedys od czegos zaczynal, no zobacz: https://github.com/kacperduras/HardcoreGuilds, kilka lat temu pisane (chyba przez northa) - porownaj to do jego teraz obecnego kodu = ) Kazdy uczy sie na swoich bledach, kazdy od czegos zaczynal, kazdy z czasem sie uczy
  6. yooniks

    MALY PROBLEM

    To moze czas na nauke czytania ze zrozumieniem? Piszesz z du*y cos o skripcie, jak jasno napisal ze ma problem z kodem pluginu napisanego w javie (co nawet swiadczy po dziale samego tematu) - bo robisz tylko niepotrzebny spam Co do samego tematu: if (myBoolean == true) { } //to tak samo jak: if (myBoolean) { } // krocej, szybciej, ladniej @Override public boolean onCommand(CommandSender sender, Command cmd, String l, String[] args) { Player p = (Player) sender; if(p.hasPermission("test.test")) { A co jezeli CommandSender nie jest graczem, tylko np. mhmmm, herobrinem lub konsolą? Sam CommandSender ma juz metode 'hasPermission', i przed castowaniem playera do sendera najlepiej mozesz sprawdzac cos w tym stylu: if (!(sender instanceof Player)) { sender.sendMessage("tylko gracz moze wywolac ta komende!"); return; } I zamiast robienia 10 komend mozesz uzyc argumentow, czyli np: if (cmd.getName().equalsIgnoreCase("mycommand")) { //lub label if (args.length > 0) { if (args[0].equalsIgnoreCase("test")) { sender.sendMessage("test! Wywolales komende: \"mycommand test\""); } else { sender.sendMessage("niepoprawny argument!"); } } else { sender.sendMessage("zbyt malo argumentow!"); } } do tego: http://www.samouczekprogramisty.pl/modyfikatory-dostepu-w-jezyku-java/ https://pl.wikipedia.org/wiki/Final_(Java) https://javastart.pl/baza-wiedzy/darmowy-kurs-java/programowanie-obiektowe/argumenty-metod (doczytaj bardziej o metodach zwracajacych COS, a nie void)
  7. ehh, nie, nie, nie to tak samo jakby robil: static Object something; static { something = new SomeObject(); } tylko robi to bez static, no i tez moglby w sumie poczytac o modyfikatorach dostepu i zmiennych/fieldach finalnych bo wyglada to dosc brzydko i tez wplywa troche na sam kod, tak samo te ulozenie klamr itd., niech najlepiej uzywa sobie tego code-style od google: https://github.com/google/styleguide/blob/gh-pages/intellij-java-google-style.xml no ale watpie ze na razie to ogarnie, niech pierw pouczy sie podstaw. po prostu ustawia item na 9 slot (tak jakby na 10 - dlatego wywala mu blad) - bo bukkit liczy w inventory sloty od 0 do 8 - jeden rząd (0-8) dlatego wywala mu arrayindexoutofbounds ;/ no i do tego pokazuje to nawet w konsoli dokladnie: wiec wystarczy ze wywalisz: z kodu, bo wtedy bedzie wymagane inventory size o wartosci 9*2, a nie 9.
  8. yooniks

    MALY PROBLEM

    nic nie bede pisac, po prostu "X D" Nie wiem o co ci dokladnie chodzi, ale jezeli po prostu chcesz zablokowac wyciaganie itemow z okreslonego inventory, ktore masz gdzies zapisane to po prostu przy evencie InventoryClickEvent sprawdzasz czy inventory nie jest nullem (bo gracz moze kliknac poza gui), jezeli jest to return, sprawdzasz nazwe tego inventory, jezeli jest rowna inventory ktore masz gdzies zapisane to ustawiasz cancelled na true, czyli Cancellable#setCancelled(true); Wspomniales cos o enderchescie, nie wiem o co dokladnie ci chodzi, ale jezeli chcesz zablokowac wyciaganie itemow z enderchesta to po prostu sprawdzasz InventoryType uzywajsz Inventory#getType, jezeli jest 'ENDERCHEST' to znowu tak jak wyzej napisalem, cancelujesz event. https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/event/Cancellable.html https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/event/inventory/InventoryClickEvent.html https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/event/inventory/InventoryType.html
  9. yooniks

    MALY PROBLEM

    daj fielda 's' nad fieldem 'inv'
  10. mala poprawka: @EventHandler public void onJoin(PlayerJoinEvent e){ final Player p = e.getPlayer(); int joinsByPlayer = this.joinsByPlayers.getOrDefault(p.getUniqueId(), 0); this.joinsByPlayers.put(p.getUniqueId(), joinsByPlayer++); p.sendMessage("Wszystkich TWOICH logowan: " + joinsByPlayer); }
  11. Jak nie znasz podstaw Javy to nie zaczynaj od bukkita https://javastart.pl/baza-wiedzy/darmowy-kurs-java/klasy/interfejs-map
  12. public class Main extends JavaPlugin implements Listener { private int i; @Override public void onEnable() { this.getServer().getPluginManager().registerEvents(this, this); } @Override public void onDisable() { } @EventHandler public void onJoin(PlayerJoinEvent e){ i++; e.getPlayer().sendMessage("Wszystkich logowan: " + i); } } a z graczmi: public class Main extends JavaPlugin implements Listener { private final Map<UUID, Integer> joinsByPlayers = new HashMap<>(); @Override public void onEnable() { this.getServer().getPluginManager().registerEvents(this, this); } @Override public void onDisable() { } @EventHandler public void onJoin(PlayerJoinEvent e){ final Player p = e.getPlayer(); final int joinsByPlayer = this.joinsByPlayers.getOrDefault(p.getUniqueId(), 0); this.joinsByPlayers.put(p.getUniqueId(), joinsByPlayer); p.sendMessage("Wszystkich TWOICH logowan: " + joinsByPlayer++); } } (pisane w tak jakby notatniku, wiec zrob sobie reformat code jak wyglada brzydko, edytowalem tylko kod, nie code-style)
  13. Nie no, jestem na telefonie i jak to czytam to porazka xd jak bede na kompie (jeszcze raczej dzisiaj) to ci pomoge, @KrejzolekPRO nie dawaj gotowcow bo tak sie niczego nie nauczy i do tego dajesz zly kod i uczysz go złych nawykow. Tak na szybko: zle tlumaczysz mapki, uzywasz obiektowego integer jak nie trzeba, everywhere static, w mapce masz getOrDefault a ty uzywasz 'expression ? 0 : 1' i wgl wszystko prawie zle xd do tego z 10 postów o tym ze cos jest zle jak gosciu mial dobrze kod tylko nie rejestrował eventu a potem usuneliscie mu adnotacje eventhandler
  14. Jakie pętle? Wuut? I timer i timertask, właśnie to mnie martwi, przecież w bukkicie masz juz takie cos w Scheduler ;/ wątpie ,że to zadziała powinno być " " jeżeli \n ma działać. (no albo ja nie jestem na tak zaawansowanym poziomie i źle wiedziałem) EH ;/ Jakby było dobrze napisane to nawet jakby miało wysyłać wiadomość co sekunde lub nawet kilkaset milisekund (a moze nawet mniej, nie sprawdzalem czy taki spam coś robi) by nie lagowało. Brak konfiguracji gui (itemów, nazwy itd.) package Listener z dużej i nie pod twoim package, czemu? ;/ co jak inventory jest nullem? tzn. gracz kliknie poza inventory - to inventory.getname bedzie zwracac null i bedzie walic bledy :d if'y mozna zrobic lepiej, krócej, tak samo całe automessage - jak dla mnie nie ma żadnego sensu, no ale cóż od czegoś trzeba zacząć, w sumie to zrobiłbym forka i poprawił tak jak trzeba, ale wtedy sie niczego nie nauczysz
  15. Ile tych updateow będzie az w koncu zrobisz to porządnie? po co uzywasz static jak masz to w jednej klasie i w listenerze tez nie musi byc statycznie jezeli jest (nie czytałem kodu listenera) Zamiast timera mozesz używać taskow i wgl kod wyglada jak kupa.
  16. A czego sie spodziewasz? Ledwo co ogarnales troche javy i bukkita i od razu robisz publiczny plugin, a kod wyglada jak sraka i jest bardzo niewydajny. Gdyby kazdy tutaj przychodzil ze swoimi pierwszymi pluginami to te forum byloby zasmiecone ;/ Napiszcie cos pozadnie i dobrze i najlepiej cos nowego, a nie cos co jest dostepne w internecie za darmo, lepsze. A takie projekty zostawcie dla siebie i je poprawiajcie caly czas, az cos z tego wyjdzie, a nie wrzucacie takie cos i pozniej jeszcze ktos ma takie cos uzywac ;/
  17. Kod wygląda tragicznie, osobiście bym tego nie używał, nie polecam ;/ private static Random rand = new Random(); private static Random r = new Random(); po co ci dwa razy to samo? do tego powinno byc finalne wszystko statycznie, niewydajnie, kod wyglada jak kupa, wszystko zrobione tak oby po prostu dzialalo ;/
  18. Lepiej zwrócić uwage na to ze moga byc one finalne, ze uzywa on timera, robi wszystko statycznie i przy kazdym wysylaniu wiadomosci tworzy nowa instancje random
  19. Upewnij sie ze masz wlaczone bungeecord na true oraz ip-forward w configach serwerow.
  20. yooniks

    Jablko

    dodales adnotacje eventhandler? Zarejestrowales event? I do tego nie sprawdzasz czy item to jablko tylko blokujesz mozliwosc jedzenia wszystkiego ;/
  21. na autoryzacje łatwo napisać, tylko to już klient będzie sie dalej męczyć i wywali plugin jak nagle blazingpack zmieni coś w swojej paczce i plugin nagle przestanie ci działać poprawnie A antycheat długo sie pisze wiec pewnie cena wysoka, poza tym moim zdaniem lepiej już uzywać nocheatplus itd. i ew. zrobić coś pod api nocheatplus, jeżeli vl (np. od fly) jest wieksze niż ileś tam to po prostu banuje, bo większość antycheatów sie buguje i nie warto robić samemu. Ja tak samo nie używam skype, a portfolio chętnie bym zobaczył, kodzisz 4 lata, więc jakim cudem nie masz ani jednego projektu publicznego? Chcialbym zobaczyć jak wyglada twoj kod po tych '4 latach', czemu wiekszosc osob teraz pisze na zlecenia, a nie ma zadnego portfolio? Zadna powazna osoba/serwer do ciebie nawet nie napisze.. W skrócie - dopóki nie będzie jakiś projekt publiczny to nie polecam, równie dobrze ten pan może sie bawić w pluginach miesiąc i szukać zarobku na głupich ludziach ;/
  22. ja tu tylko przypomne ze skript sam zapisuje wszystkie zmienne (oprocz tych tymczasowych) do osobnego pliczku, wiec nie musisz sie bac o utrate danych.
  23. musisz znalezc sobie jakis plugin ktory ci w tym pomoze np. https://github.com/kacperduras/CommandBridge https://www.spigotmc.org/resources/commandsync.115/
  24. co sekunde dodawaj do zmiennej {time.seconds::%player%} 1 - jezeli jest wiecej niz 60 to ustawiaj to na 0 i dodawaj do minut 1 itd. a przy whois po prostu wyswietlaj zmienne.
  25. Serwer jest podpięty pod bungee? Jeżeli tak to masz włączone bungeecord w configach serwerów na true oraz ip-forward w configu bungeecorda?
×
×
  • Dodaj nową pozycję...