Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Problemy z optymalizacja pluginów


Gorgi123

Rekomendowane odpowiedzi

Opublikowano

Witam macie jakieś poradniki,pomoc coś co pomoże mi optymalizować kody ,ponieważ większość poradników na yt to poradniki typu zrób 1 classe z milionem eventów a chciałbym się nauczyć pisać jak najbardziej zoptymalizowane kody

Opublikowano

przykładowy kod@EventHandler

public void ondeath(PlayerRespawnEvent e){
final Player p = e.getPlayer();
if(!p.hasPlayedBefore());
ItemStack sword = new ItemStack(Material.DIAMOND_SWORD, 1);
ItemStack sword1 = new ItemStack(Material.DIAMOND_SWORD, 1);
ItemStack bow = new ItemStack(Material.BOW, 1);
ItemStack koxy = new ItemStack(Material.GOLDEN_APPLE, 2, (short)1);
ItemStack refy = new ItemStack(Material.GOLDEN_APPLE, 16);
ItemStack helm= new ItemStack(Material.DIAMOND_HELMET, 1);
ItemStack klata = new ItemStack(Material.DIAMOND_CHESTPLATE, 1);
ItemStack spodnie = new ItemStack(Material.DIAMOND_LEGGINGS, 1);
ItemStack buty = new ItemStack(Material.DIAMOND_BOOTS, 1);
ItemStack mieso = new ItemStack(Material.COOKED_BEEF, 64);
ItemStack kamien = new ItemStack(Material.COBBLESTONE, 64);
ItemStack kilof = new ItemStack(Material.DIAMOND_PICKAXE, 1);
ItemStack wiadro = new ItemStack(Material.WATER_BUCKET, 1);
sword.addEnchantment(Enchantment.DAMAGE_ALL, 5);
        sword.addEnchantment(Enchantment.DURABILITY, 3);
        sword1.addEnchantment(Enchantment.KNOCKBACK, 2);
        sword1.addEnchantment(Enchantment.DURABILITY, 3);
        helm.addEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, 4);
        helm.addEnchantment(Enchantment.DURABILITY, 3);
        klata.addEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, 4);
        klata.addEnchantment(Enchantment.DURABILITY, 3);
        spodnie.addEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, 4);
        spodnie.addEnchantment(Enchantment.DURABILITY, 3);
        buty.addEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, 4);
        buty.addEnchantment(Enchantment.DURABILITY, 3);
        kilof.addEnchantment(Enchantment.DURABILITY, 3);
        kilof.addEnchantment(Enchantment.DIG_SPEED, 5);
        bow.addEnchantment(Enchantment.DURABILITY, 3);
        bow.addEnchantment(Enchantment.ARROW_KNOCKBACK, 2);
        bow.addEnchantment(Enchantment.ARROW_INFINITE, 1);
       
        p.getInventory().clear();
        p.getInventory().addItem(sword);
        p.getInventory().addItem(sword1);
        p.getInventory().addItem(koxy);
        p.getInventory().addItem(refy);
        p.getInventory().setHelmet(helm);
        p.getInventory().setChestplate(klata);
        p.getInventory().setLeggings(spodnie);
        p.getInventory().setBoots(buty);
        p.getInventory().addItem(bow);
        p.getInventory().addItem(kamien);
        p.getInventory().addItem(wiadro);
        p.getInventory().addItem(mieso);
        p.getInventory().addItem(kilof);
        Location location = new Location(Bukkit.getWorld("world"), 0, 70, 0);
    p.teleport(location);
    Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
    public void run() {
    Location location = new Location(Bukkit.getWorld("world"), 0, 70, 0);
        p.teleport(location);
   
    }
    }, 1);
    }
Opublikowano

Nie ma jakiegoś specjalnego wzoru na optymalizację, po prostu musisz myśleć podczas kodowania.

Aby pisać jak najwydajniej najlepiej na samym początku nauczyć się czystej Javy, jej funkcji, możliwości interfejsów, adnotacji, refleksji (w cb rzadko są przydatne) i co najważniejsze - programowania obiektowego. Bez obiektów większego pluginu nie napiszesz (typu gildie [oczywiście możesz lecieć na samych mapkach i listach no ale powodzenia potem z ramem], czy toolsy). Potem możesz pomyśleć co udoskonalić, np. jak masz jakąś metodę:

public void something(Object... params)
{
    Object got = getConfig().getInt("pathToInt");
    // reszta kodu
}

To przy każdym użyciu metody zapychasz ram deklarując cały czas nowy obiekt pobierając z pliku konfiguracyjnego wartość. To najpopularniejszy z błędów.

Tak samo działa to (dosyć popularne, dwa, bardzo poważne błędy):

public String toDate(long time)
{
    SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:SS dd.MM.YYYY");
    return dateFormat.format(new Date(time));
}

Przy każdym przekształcaniu longa na czas metoda tworzy nowy obiekt SimpleDateFormat.

Drugi popularny błąd:

public int getRandomInt()
{
    return new Random().nextInt(100);
}

Za każdym razem nowy Random. Może trochę obciążyć.

 

Pilnuj się zasad, trzymaj się obiektów i nie nadużywaj ramu, a będzie dobrze.

Opublikowano

Nie ma jakiegoś specjalnego wzoru na optymalizację, po prostu musisz myśleć podczas kodowania.

Aby pisać jak najwydajniej najlepiej na samym początku nauczyć się czystej Javy, jej funkcji, możliwości interfejsów, adnotacji, refleksji (w cb rzadko są przydatne) i co najważniejsze - programowania obiektowego. Bez obiektów większego pluginu nie napiszesz (typu gildie [oczywiście możesz lecieć na samych mapkach i listach no ale powodzenia potem z ramem], czy toolsy). Potem możesz pomyśleć co udoskonalić, np. jak masz jakąś metodę:

public void something(Object... params)
{
    Object got = getConfig().getInt("pathToInt");
    // reszta kodu
}

To przy każdym użyciu metody zapychasz ram deklarując cały czas nowy obiekt pobierając z pliku konfiguracyjnego wartość. To najpopularniejszy z błędów.

Tak samo działa to (dosyć popularne, dwa, bardzo poważne błędy):

public String toDate(long time)
{
    SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:SS dd.MM.YYYY");
    return dateFormat.format(new Date(time));
}

Przy każdym przekształcaniu longa na czas metoda tworzy nowy obiekt SimpleDateFormat.

Drugi popularny błąd:

public int getRandomInt()
{
    return new Random().nextInt(100);
}

Za każdym razem nowy Random. Może trochę obciążyć.

 

Pilnuj się zasad, trzymaj się obiektów i nie nadużywaj ramu, a będzie dobrze.

Dzięki za pomoc wiem że nie ma żadnych kodów itp optymalizacji właśnie o to mi chodzi żeby jak najlepiej skrócić kod taka pomoc jak twoja jest mi potrzebna 

Opublikowano

Witam macie jakieś poradniki,pomoc coś co pomoże mi optymalizować kody ,ponieważ większość poradników na yt to poradniki typu zrób 1 classe z milionem eventów a chciałbym się nauczyć pisać jak najbardziej zoptymalizowane kody

musisz zwyczajnie analizować kod, zagłębiać się w to co on robi tam głębiej, na początku interesować się tylko API, np co dokładnie sie wykonuje jak wywołujesz getPlayer, czy to optymalne? czy to dobre? i potem schodzić coraz niżej, aż z czasem poznasz jak pisać switcha tak by był wydajniejszy, jak ilośc warunków wpływa na wydajność kodu, czy same zasady działania JVM.

Innej opcji niż przez doświadczenie - swoje i cudzie, się nie da :P przestań szukać wszystkiego pod swoją technologię - bukkita, zacznij myśleć bardziej abstrakcyjne, bukkit jest w javie - jak pisać wydaje w javie? i czytasz, testujesz, poznajesz, a potem? czym jest java? jak jest złożona? To język programowania z kompilacją w trakcie wykonywania, więc musisz też poczyć o tym jak JIT wpływa na wydajność, z czym sobie radzi lepiej, z czym gorzej. No i gdzie wykonuje się kod? na sprzęcie, na CPU, korzystają z cache i ramu, o czym pamiętać tutaj?

 

Tylko też nie przesadzaj, ucz się tego, bo warto, ale nie spędzaj 2 dni na optymalizowaniu funkcji która ładuje dane z konfiguracji raz na 10 godzin lub raz na włączenie serwera, te stracone 0.5 sec nikogo nie uratuje i nie jest warte 2 dni.

1438614356923701010629.png

 

Opublikowano

Pisz pod PaperSpigot'a ( jest to bardziej zoptymalizowany silnik )

https://tcpr.ca/downloads/paperspigot

Pisz w IntelliJ ( chyba najlepszy program, do pisania pluginów )

https://www.jetbrains.com/idea/

Używaj java optymalizerów ( profilują one wydajność kodu )

https://www.ej-technologies.com/products/jprofiler/overview.html

opencraft.pl << { na takim jeszcze nie grałeś }

TDepLbR.gif

Opublikowano

 

Pisz pod PaperSpigot'a ( jest to bardziej zoptymalizowany silnik )

https://tcpr.ca/downloads/paperspigot

Pisz w IntelliJ ( chyba najlepszy program, do pisana pluginów )

https://www.jetbrains.com/idea/

Używaj java optymalizerów ( profilują one wydajność kodu )

https://www.ej-technologies.com/products/jprofiler/overview.html

czemu niby IntelliJ  jest lepsze do pisania pluginów od np net beansa? taka prawda że plugin tak samo dobry napiszesz w IntelliJ  jak i w eclipsie nie ma znaczenia, jest to zależne tylko od preferencji programisty

Co ja tutaj robie...

Opublikowano

 

 

Pisz pod PaperSpigot'a ( jest to bardziej zoptymalizowany silnik )

https://tcpr.ca/downloads/paperspigot

Pisz w IntelliJ ( chyba najlepszy program, do pisana pluginów )

https://www.jetbrains.com/idea/

Używaj java optymalizerów ( profilują one wydajność kodu )

https://www.ej-technologies.com/products/jprofiler/overview.html

czemu niby IntelliJ  jest lepsze do pisania pluginów od np net beansa? taka prawda że plugin tak samo dobry napiszesz w IntelliJ  jak i w eclipsie nie ma znaczenia, jest to zależne tylko od preferencji programisty

 

no z eclipse to bym uważał, taka intellijka czy netbeans ładnie podpowie w kilku miejscach kilka przydatnych faktów, na które nie zawsze można zwrócić samemu uwagę.

 

A intellijka ma do tego dekompilator i debuger który świetnie ze sobą współgra, co pozwala lepiej poznać API, bo nie ma problemu by wejść debuggerem do środka metoda której kodu nie mamy - tym samym możemy dowiedzieć się jak działa - lepiej zoptymalizować kod.

Więc dobre IDE też może okazać się pomocne :P

1438614356923701010629.png

 

Opublikowano

Już widać, że próbujesz wykraść kod z innego pluginu bądź poradnika..

Wytłumacz mi sens działania tego?

 

Przeanalizujmy:

Location location = new Location(Bukkit.getWorld("world"), 0, 70, 0);
    p.teleport(location);
    Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
    public void run() {
    Location location = new Location(Bukkit.getWorld("world"), 0, 70, 0);
        p.teleport(location);
   
    }
    }, 1);

Tworzysz nową lokację, teleportujesz na nią gracza po czym tworzysz kolejną lokację i teleportujesz go po jednym ticku o.O?

Obstawiam, że po prostu chcesz dać mu zestaw startowy. Nie jest wymagane tutaj w ogóle teleportowanie go na poziom spawnu, wystarczy wejść na serwer i wpisać /setworldspawn..

I tak wyląduje tam gdzie chcesz optymalizacja nie ucierpi

784091427630431250239.png

Regulamin sygnatur

Opublikowano

Już widać, że próbujesz wykraść kod z innego pluginu bądź poradnika..

Wytłumacz mi sens działania tego?

 

Przeanalizujmy:

Location location = new Location(Bukkit.getWorld("world"), 0, 70, 0);
    p.teleport(location);
    Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
    public void run() {
    Location location = new Location(Bukkit.getWorld("world"), 0, 70, 0);
        p.teleport(location);
   
    }
    }, 1);

Tworzysz nową lokację, teleportujesz na nią gracza po czym tworzysz kolejną lokację i teleportujesz go po jednym ticku o.O?

Obstawiam, że po prostu chcesz dać mu zestaw startowy. Nie jest wymagane tutaj w ogóle teleportowanie go na poziom spawnu, wystarczy wejść na serwer i wpisać /setworldspawn..

I tak wyląduje tam gdzie chcesz optymalizacja nie ucierpi

nie wykradam kodu z innego pluginu po prostu z forum zagranicznych kawałki kodu ogarniam 

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...