Skocz do zawartości

QuickRoads - Szybsze poruszanie po blokach


Rekomendowane odpowiedzi

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 przez ArduinoKrystian
Odnośnik do komentarza
https://skript.pl/temat/24840-quickroads-szybsze-poruszanie-po-blokach/
Udostępnij na innych stronach

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 :D 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.

Odnośnik do komentarza
https://skript.pl/temat/24840-quickroads-szybsze-poruszanie-po-blokach/#findComment-165766
Udostępnij na innych stronach

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... :D 

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 przez GotoFinal
Odnośnik do komentarza
https://skript.pl/temat/24840-quickroads-szybsze-poruszanie-po-blokach/#findComment-165814
Udostępnij na innych stronach

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.

Odnośnik do komentarza
https://skript.pl/temat/24840-quickroads-szybsze-poruszanie-po-blokach/#findComment-165823
Udostępnij na innych stronach

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ą.

Nieaktywny
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...