Skocz do zawartości
Inder00

rhDrop - Innowacyjny plugin na drop OpenSource

Rekomendowane odpowiedzi

Użytkownik

rhDrop

... to rozbudowywany plugin wprowadzający innowacyjny menadżer dropu na Twój serwer. Plugin posiada wiele rozmaitych możliwości. Wspiera wersje spigot 1.7.x-1.12.x

 

Pobierz:  Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!

Błędy Propozycje: Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!

Kod źródłowy: Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!

Funkcje:

  • Wielowątkowość
  • Poziomy górnictwa
  • Turbodrop
  • Możliwość ustawienia dropu z równych bloków
  • Zapis FLAT, MySQL, SQLite
  • Pełna konfiguracja
  • I wiele więcej [...]

Uprawnienia:

  • rhDrop.admin.turbodrop - Pełne zarządzanie turbodropem.

Prezentacja:

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Użytkownik

czemu używasz comparatora zamiast comparable, comparatora zazwyczaj używa się w przypadkach, gdy chcesz compare'ować obiekty, nad którymi nie masz kontroli albo chcesz wiele implementacji:

https://github.com/Inder00/Drop/blob/master/src/pl/inder00/drop/comparators/DropComparator.java#L7

 

https://github.com/Inder00/Drop/blob/master/src/pl/inder00/drop/objects/User.java

no i sam kod nie powala, wiele rzeczy mogłoby być obiektowe zamiast statyczne

brak jakiejkolwiek kontroli danych, nazewnictwo paczek, package scope

no i nie widzę też tego multithreadingu, który jest nadmieniony w prezentacji

 

 

Edytowane przez insertt

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Gość
Nieaktywny   
Losowy awatar

@MandMLove nie znam się, to się wypowiem?
Więc tak:

  • klasy zawsze zaczyna się od wielkiej litery;
  • tworzenie statycznej instancji jest unsafe i wolne, przekazuj ją przez konstruktor;
  • Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!, do obozu;
  • Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!, poje*ało? Pobierz instancje Plugin z PluginManager'a i na niej działaj;
  • Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!, wyżej robisz prywatne statyczne, a tutaj publiczne. Zdecyduj się;
  • Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!, rozstrzelać, użyj ChatColor'u, a najlepiej to BaseComponent'a;
  • Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!, side-effects, zmień to + a co jeżeli parametr będzie nullem?;
  • Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!, Matko Przenajświętsza. Już widać że kod kopiowany;
  • Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!, Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść! wzięte żywcem ze starych FG configi w nich zostały nie tak całkiem dawno zmieniane;
  • Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!, jakbym widział kod z gildii Kamilkime, całość ułożona podobnie i dalej masz side-effects, w ogóle się człowieku nie rozwijasz/poprawiasz;
  • Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!, to wszystko jest statyczne. Gdzie zastosowane jest tutaj programowanie obiektowe?;
  • Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!, Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!, zażywa Nerwosol na uspokojenie, dlaczego do jasnej ku*wy pola są statyczne i publiczne? Tu wszystko jest statyczne. Używaj preparedStatement'ów;
  • Dlaczego połączenia z bazami danych są w głównym wątku? Rozumiesz że zaje*biesz życem serwer? Co z tego, że bazy danych w dzisiejszych czasach mają dostępność niekiedy poniżej 1ms, przy większej ilości danych serwer padnie;
  • Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!, a ten dalej swoje, no co za człowiek;
  • Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!, TO TAKI WIELKI PROBLEM, ŻEBY PRZECHOWYWAĆ UUID NIE JAKO OBIEKT, A STRING?;
  • Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!, masz od tego eventy asynchroniczne, przy okazji mógłbyś dodać tworzenie się rekordów w bazie danych, jak gracz jest pierwszy raz na serwerze;
  • Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!, Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!, pola powinny być finalne, w dodatku mieszasz manager'a z obiektem, lista powinna być w osobnej klasie pominę fakt, iż tu wszystko jest statyczne;
  • Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!, DLACZEGO CO CHWILE TWORZYSZ NOWEGO RANDOM'A, JAK Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść! ROBISZ TO ZUPEŁNIE INACZEJ. WIĘCEJ KODU ZAPIE*DOLIĆ SIĘ NIE DAŁO?

 

Żenada, to coś nie powinno istnieć. 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Senior administrator

Plugin niczym się nie wyroznia. Wiele zbednych linijek + to co wyżej.

Wielowatkowosci tez tu nie ma.

Edytowane przez Ixidi

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Użytkownik
3 godziny temu, Wizzard napisał:

@MandMLove nie znam się, to się wypowiem?
Więc tak:

  • klasy zawsze zaczyna się od wielkiej litery;
  • tworzenie statycznej instancji jest unsafe i wolne, przekazuj ją przez konstruktor;
  • Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!, do obozu;
  • Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!, poje*ało? Pobierz instancje Plugin z PluginManager'a i na niej działaj;
  • Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!, wyżej robisz prywatne statyczne, a tutaj publiczne. Zdecyduj się;
  • Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!, rozstrzelać, użyj ChatColor'u, a najlepiej to BaseComponent'a;
  • Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!, side-effects, zmień to + a co jeżeli parametr będzie nullem?;
  • Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!, Matko Przenajświętsza. Już widać że kod kopiowany;
  • Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!, Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść! wzięte żywcem ze starych FG configi w nich zostały nie tak całkiem dawno zmieniane;
  • Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!, jakbym widział kod z gildii Kamilkime, całość ułożona podobnie i dalej masz side-effects, w ogóle się człowieku nie rozwijasz/poprawiasz;
  • Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!, to wszystko jest statyczne. Gdzie zastosowane jest tutaj programowanie obiektowe?;
  • Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!, Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!, zażywa Nerwosol na uspokojenie, dlaczego do jasnej ku*wy pola są statyczne i publiczne? Tu wszystko jest statyczne. Używaj preparedStatement'ów;
  • Dlaczego połączenia z bazami danych są w głównym wątku? Rozumiesz że zaje*biesz życem serwer? Co z tego, że bazy danych w dzisiejszych czasach mają dostępność niekiedy poniżej 1ms, przy większej ilości danych serwer padnie;
  • Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!, a ten dalej swoje, no co za człowiek;
  • Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!, TO TAKI WIELKI PROBLEM, ŻEBY PRZECHOWYWAĆ UUID NIE JAKO OBIEKT, A STRING?;
  • Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!, masz od tego eventy asynchroniczne, przy okazji mógłbyś dodać tworzenie się rekordów w bazie danych, jak gracz jest pierwszy raz na serwerze;
  • Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!, Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!, pola powinny być finalne, w dodatku mieszasz manager'a z obiektem, lista powinna być w osobnej klasie pominę fakt, iż tu wszystko jest statyczne;
  • Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!, DLACZEGO CO CHWILE TWORZYSZ NOWEGO RANDOM'A, JAK Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść! ROBISZ TO ZUPEŁNIE INACZEJ. WIĘCEJ KODU ZAPIE*DOLIĆ SIĘ NIE DAŁO?

 

Żenada, to coś nie powinno istnieć. 

Parę rzeczy jest od pana Spook'u, z jego dropu, który pisał na lajwie, a przynajmniej tak mi się wydaje po, np. tym:

public static void recalculateDurability(Player player, ItemStack item) {
        if (item.getType().getMaxDurability() == 0) {
            return;
        }
        int enchantLevel = item.getEnchantmentLevel(Enchantment.DURABILITY);
        short d = item.getDurability();
        if (enchantLevel > 0) {
            if (100 / (enchantLevel + 1) > randomInt(0, 100)) {
                if (d == item.getType().getMaxDurability()) {
                    player.getInventory().clear(player.getInventory().getHeldItemSlot());
                } else {
                    item.setDurability((short) (d + 1));
                }
            }
        } else if (d == item.getType().getMaxDurability()) {
            player.getInventory().clear(player.getInventory().getHeldItemSlot());
        } else {
            item.setDurability((short) (d + 1));
        }
    }

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Użytkownik
Dnia 16.09.2017 o 23:38, KrejzolekPRO napisał:

Parę rzeczy jest od pana Spook'u, z jego dropu, który pisał na lajwie, a przynajmniej tak mi się wydaje po, np. tym:

Czyli to że napisał to Spook'u (Chodź to nie jest pewne) to już nikt inny tego nie może użyć tak ? :v

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Użytkownik
Teraz, McKoxu napisał:

Czyli to że napisał to Spook'u (Chodź to nie jest pewne) to już nikt inny tego nie może użyć tak ? :v

Warto poinformować że praca nie jest samodzielna :v

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Użytkownik

pełno kodu z internetu, i w sumie to juz kazdy wszystko ci napisal, ale ja przyczepie sie jeszcze do tego:

		Bukkit.getConsoleSender().sendMessage("§c["+desc.getName()+" v"+desc.getVersion()+"] "+s);

po co jest ten caly logger?

(plugin extends JavaPlugin).getLogger().info("Wlaczam plugin..");

chciałeś sie pochwalić, że używasz paragrafów i umiesz pobrać opis z plugin.yml?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Użytkownik

Mam taki problem, bo gram sobie z kolegami na hamachi, i zrobiłem serwer skyblock. I podczas skonfigurowania pluginu wszystko działa dobrze, do czasu kiedy stworzę sobie wyspę i zacznę kopać stone, to w ogóle nie mam dropu na osobnej mapie skyblock, a na zwykłym świecie superflat gdzie posiadam spawn wszystko działa bez problemu.. Jak zrobić to, aby działało na mapie skyblock?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Użytkownik

Przepraszam za odkop, ale to ma poważny bug... exploit!

Robisz zapytania do SQL, ale nie dbasz o to, że ktoś tam może wstrzyknąć SQL injection! Jak ktoś w tej samej bazie ma tabelki z AuthMe, a plugin korzysta z konta który ma do tamtej tabeli uprawnienia (a niestety na większości serwerach tak jest), to można dostać dostęp do haseł graczy, IP, .... masakra :D

q5ohRTx.png

Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!

Skomentowałem w kod co można poprawić, dałem radę tylko połowę skomentować, resztą zajmę się może jutro :P

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Użytkownik
14 minut temu, TheMolkaPL napisał:

Przepraszam za odkop, ale to ma poważny bug... exploit!

Robisz zapytania do SQL, ale nie dbasz o to, że ktoś tam może wstrzyknąć SQL injection! Jak ktoś w tej samej bazie ma tabelki z AuthMe, a plugin korzysta z konta który ma do tamtej tabeli uprawnienia (a niestety na większości serwerach tak jest), to można dostać dostęp do haseł graczy, IP, .... masakra :D

q5ohRTx.png

Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!

Skomentowałem w kod co można poprawić, dałem radę tylko połowę skomentować, resztą zajmę się może jutro :P

A takie coś działa obojętnie czy się używa sql czy nie, czy tylko jak się go używa? Tak z ciekawości się pytam :v

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Użytkownik
2 minuty temu, McKoxu napisał:

A takie coś działa obojętnie czy się używa sql czy nie, czy tylko jak się go używa? Tak z ciekawości się pytam :v

To zależy, SQL injection istnieje tylko w SQL, ale też nawet do Mongo można wstrzyknąć jakieś dane. Na szczęście współczesne sterowniki chronią serwer przed takiego typu akcjami. JDBC ma do tego PreparedStatement i powolne podmienianie wartości metodami setCośTam(...).

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Użytkownik
17 godzin temu, McKoxu napisał:

A takie coś działa obojętnie czy się używa sql czy nie, czy tylko jak się go używa? Tak z ciekawości się pytam :v

PreparedStatement i gotowe

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×