ArduinoKrystian 0 Opublikowano 25 stycznia 2018 Udostępnij Opublikowano 25 stycznia 2018 (edytowane) WITAJCIE!!! Chciałbym wam przedstawić mój pierwszy plugin QuickRoads. Plugin umożliwia ustawienie wartości efektu speed po przemieszczeniu się na dany blok. Komendy: /quickroads info <-- wyświetla informacje o wartości efektu speed na danym bloku /quickroads reload <-- przeładowuje konfiguracje skrót /qr Konfiguracja: Block: GRASS_PATH,STONE <-- bolki z efektami Speed: 3,5 <-- wartość efektu speed na blokach np. GRASS_PATH:3 STONE:5 Pobieranie: 1.0.0 Plik:http://www.mediafire.com/file/f30phf9gsf156zv/QuickRoads.jar Skan:https://www.virustotal.com/#/file/9cb0b3be693d8930c87443199472e409ea8216e545c7bffcebedb5b7a3e2cb22/detection 1.1.0 Plik:http://www.mediafire.com/file/ya1rld1y8xgx7x6/QuickRoads1.1.0.jar Skan:https://www.virustotal.com/#/file/c327dd916a18ca916d71b37125dc3aa76bc3811c3af82f5236676e3a5b2d91f4/detection 1.2.0 Plik:http://www.mediafire.com/file/d3p0xj11ph9644r/QuickRoads1.2.0.jar Skan:https://www.virustotal.com/#/file/4af844906a8dbb538734343a4c19a50cb459fccc29d59adc56814c1e3e7fbac0/detection Edytowane 26 stycznia 2018 przez ArduinoKrystian Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
GotoFinal 195 Opublikowano 25 stycznia 2018 Udostępnij Opublikowano 25 stycznia 2018 Musisz udostępnić plik na dropboxie i użyć wygenerowanego linku do udostępniania... bo tak to wkleiłeś linka co każdemu będzie próbował znaleźć ten plik na własnym koncie Dobra, poprawiłeś link, i jest to czego się obawiałem: @EventHandler public void onPlayerMove(PlayerMoveEvent e) { for (int x = 0; x < this.block.length; x++) { if (e.getTo().getBlock().getRelative(BlockFace.DOWN).getType() == Material.valueOf(this.block[x].toUpperCase())) { for (Player p : Bukkit.getServer().getOnlinePlayers()) { e.getPlayer().addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 3, this.speed[x] - 1)); } } if ((e.getTo().getBlock().getRelative(BlockFace.SELF).getType() == Material.valueOf(this.block[x].toUpperCase())) && (Material.valueOf(this.block[x].toUpperCase()) == Material.GRASS_PATH)) { for (Player p : Bukkit.getServer().getOnlinePlayers()) { e.getPlayer().addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 3, this.speed[x] - 1)); } } } } Taki kod w evencie od ruchu to słaby pomysł, even od ruchu bardzo obciąża serwer bo wykonuje się wiele razy w ciągu sekundy dla każdego gracza. Do tego ten kod nie ma sensu, z jakiegoś powodu robisz tam pętlę po graczach i nawet nie używasz tych graczy z pętli, tam nie powinno być tej pętli - nadajesz efekt graczu tyle razy ilu jest graczy na serwerze online to nie ma sensu. Tak samo słabym pomysłem jest operowania na stringach w takich eventach "Material.valueOf(this.block[x].toUpperCase())" nie ma żadnej potrzeby by coś takiego robić, możesz przygotować to w onEnable, tak by mieć od razu gotowe Material. Do tego w material jest specjalna metoda od szukania po nazwie - sprytniejsza bo robi więcej dodatkowych rzeczy by zwiększyć szansę na znalezienie bloku. Ogólnie najlepiej by było zrobić taska który np co sekundę sprawdza na jakim bloku stoi każdy gracz i odpowiednio mu nadać efekt, do tego same efekty możesz trzymać w mapce Map<Material, Integer> gdzie klucz to ten typ bloku a wartość to poziom efektu - więc nie musisz robić pętli po wszystkich. Na dalsze optymalizacje można podzielić te skanowanie by np sprawdzać X graczy co tick, tak by nie sprawdzać np 500 graczy na raz na większych serwerach, ale to jednak nie powinno być problemem z tak prostą operacją, a dobre podzielenie to jednak sporo roboty, więc można się obejść bez tego. krzysek i ArduinoKrystian 2 Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ArduinoKrystian 0 Opublikowano 25 stycznia 2018 Autor Udostępnij Opublikowano 25 stycznia 2018 Poprawiłem plugin według zaleceń pana @GotoFinal Dziękuje Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
GotoFinal 195 Opublikowano 25 stycznia 2018 Udostępnij Opublikowano 25 stycznia 2018 (edytowane) 41 minut temu, ArduinoKrystian napisał: Poprawiłem plugin według zaleceń pana @GotoFinal Dziękuje no nie za bardzo, bo wstawiłeś tego taska do eventu dalej... To powinno być w np OnEnable, jako task z pętlą po graczach online. coś na zasadzie: new BukkitRunnable() { @Override void run() { for (Player p:Bukkit.getOnlinePlayers()) { Block block = p.getLocation().getBlock().getRelative(0, -1, 0); Integer speed = speedBlocksMap.get(block.getType()); if (speed == null) continue; // null czyli nie ma w mapie // nadanie efektu na np 2 sekundy i tej pobranej mocy } } }.startTaskTimer(this, 10,10); Można by też dodac sprawdzenie by nie nadawać efektu komuś kto już ma speeda o silniejszej mocy, lub napisać sprytniejszy system który to zsumuje na czas bycia na tym innym bloku. Edytowane 25 stycznia 2018 przez GotoFinal krzysek i Ixidi 1 1 Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ArduinoKrystian 0 Opublikowano 26 stycznia 2018 Autor Udostępnij Opublikowano 26 stycznia 2018 Tak ale jest mały problem. Próbowałem już w taki sposób i kiedy gracz stanoł na bloku którego nie ma w mapce to wywalał wyjątek co tyle ile wykonuje się zadanie więc zrobiłem to sprawdzeniem czy jest taki blok w mapce. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Dołącz do dyskusji
Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.