Skocz do zawartości

zrdzn

Użytkownik
  • Ilość zawartości

    14
  • Rejestracja

  • Ostatnia wizyta

Informacje

  • Nick w MC
    zrdzn9

Metody kontaktu

Ostatnie wizyty

239 wyświetleń profilu

Osiągnięcia zrdzn

Początkujący I

Początkujący I (2/13)

4

Reputacja

  1. Zdajesz sobie sprawę, że większość pluginów jest tam napisanych specjalnie pod kwadratową i nie ma ich nigdzie publicznie? Z tych nielicznie dostępnych jest między innymi radiacja, pvp oraz PaySign - aczkolwiek ten ostatni nie jestem pewien czy tam się pojawił.
  2. Link do discorda jest nieaktualny, albo mam z jakiegoś powodu bana.
  3. Masz chociaż jakieś publiczne portfolio czy to kupno w ciemno z nadzieją, że ktoś coś wyniesie poza nic niewartymi kosztami? Swoją drogą, jeśli chcesz kogoś uczyć to pewnie masz większą wiedzę na dany temat, a ktoś z taką wiedzą chce brać 7zł za 45 minut osobistego mentorowania? Sama "prezentacja" jest dziwnie zrobiona, nieestetyczna.
  4. zrdzn

    Code Review.

    public static Connection getConnection() throws SQLException { return ds.getConnection(); } Zamiast zwracać połączenie które może być automatycznie zamknięte, lepiej zwracać całe HikariDataSource, a połączenie pobierać za każdym razem przy zapytaniach. Prawdopodobnie to jest przyczyną błędu. Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { @Override public void run() { HikariConfig config = new HikariConfig(); config.setPoolName("StoreCraftPool"); config.setDataSourceClassName("org.sqlite.SQLiteDataSource"); config.setJdbcUrl("jdbc:sqlite:"+file.getAbsolutePath()); config.setPoolName("StoreCraftDataBasePool"); config.setMaximumPoolSize(20); config.setMaxLifetime(60000); // 60 Sec config.setIdleTimeout(30000); // 30 Sec ds = new HikariDataSource(config); } }); Uruchamianie tego asynchronicznie jest absolutnie niepotrzebne, instancję HikariDataSource inicjujesz tylko raz. static { } Puste, można wywalić. Swoją drogą za dużo w tym kodzie statycznych rzeczy jest, w większości jest on źle użyty, powinieneś zdecydowanie poczytać o obiektowości, konstruktorach itp.
  5. Czym ta sieć różni się od innych* z tego typu trybami? Nowy wymiar działek? Czyli nie jest to stawianie bloku/zaznaczanie terenu łopatą? W takim razie wypadałoby podać jakieś szczegóły, żeby rzeczywiście było to zachęcające. Swoją drogą naprawdę do każdego trybu jest przeklejony opis, który ma odrobinę zmienione parę pierwszych wyrazów? Prezentacja kiepsko wykonana, byle by była. W sklepie na stronie widzę takie usługi jak "klucze" czy "zastrzyk gotówki". Mam głęboką nadzieję, że skrzynki które otwiera się tymi kluczami, nie zawierają rzeczy niekosmetycznych, a samej gotówki nie da się zdobyć normalnie grając bez wydawania pieniędzy. Firma jest, jakiś regulamin jest, polityki prywatności tylko brakuje. Niektóre elementy na stronie zawierają polskie znaki, inne nie. Przycisk teamspeaka nie ma żadnego odnośnika. Sam wygląd strony dla mnie jest nawet niezły, responsywność i SSL też jest. Ciężko powiedzieć cokolwiek więcej, bo prezentacja niewiele zawiera.
  6. zrdzn

    Code Review.

    private Connection connection = SQLiteManager.getConnection(); private PreparedStatement ps; private ResultSet rs; No to chyba to jest największym problemem i przyczyną dlaczego to nie działa, trzy z tych rzeczy automatycznie się zamykają przy try-with-resources i średnio bezpieczne jest przypisywanie jednego pola prepared statement pod 10 różnych zapytań. Lepiej w każdej metodzie osobno w parametrach try pobierać połączenie na nowo i tworzyć w nich odpowiednią zmienną prepared statement, wtedy będziesz miał pewność, że nie będzie jakichś niespodziewanych timeoutów lub zamkniętych połączeń przed ich użyciem. Abstrahując od samego stacktrace, popełniasz ogromny błąd nie escape'ując tych zmiennych w zapytaniach, narażasz się na SQL Injection. Poniżej jest przykładowy kod który miałby to, o czym wspomniałem wyżej. public void increaseDeaths(){ this.deaths++; try { ps = connection.prepareStatement("UPDATE 'players' SET Deaths="+this.deaths+" WHERE UUID LIKE '"+this.uuid+"';"); ps.execute(); } catch (SQLException e) { e.printStackTrace(); } } Zamienić na np.: public void increaseDeaths(){ this.deaths++; try (Connection connection = SQLiteManager.getConnection(); PreparedStatement statement = connection.preparedStatement("UPDATE 'players' SET Deaths=? WHERE UUID LIKE ?;") { statement.setInteger(1, this.deaths); statement.setString(2, this.uuid.toString()); statement.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } } Nie mam pojęcia czy to połączenie tutaj się nie wykrzaczy z tego powodu, że getConnection() zwraca w tym przypadku zainicjowane połączenie które nawet nie tyka Hikari w żaden sposób, ale na SQLite zbytnio się nie znam więc to takie gdybanie. Moim zdaniem powinieneś na pewno odrobinę popracować nad strukturą tego "modelu". StorePlayer mógłby być zwykłym POJO i zawierać podstawowe pola oraz gettery takie jak znajdują się powyżej, nie łącząc tego w jednej klasie z pewnego rodzaju repozytorium. Zamiast inkrementować w taki sposób śmierci w jakiejś metodzie increaseDeaths(), mógłbyś zrobić sobie klasę która by obrała za argument uuid gracza i na jego podstawie zwiększać liczbę.
  7. Jeśli używasz pluginu LuckPerms razem z Essentials to wystarczy wpisać jedno wybrane: /lp group default permission set essentials.balance true <- dla grupy domyślnej /lp user <gracz> permission set essentials.balance true <- dla konkretnego gracza
  8. zrdzn

    Code Review.

    Mógłby się jeszcze przydać fragment z klasy StorePlayer, metoda increaseBlocksPlaced (najlepiej od 80 do 100 linijki).
  9. Przyznam, że trochę obawiam się o jakość tych pluginów jeśli są one tworzone od zera przez kogoś kto bierze 50zł na tydzień za pracę, chyba że pracuje 2 godziny tygodniowo to jeszcze zrozumiałe. Dodatkowo nie rozumiem toku myślenia osób które chcą mieć wszystko "autorskie" dla samego faktu że są one napisane specjalnie pod ten serwer kiedy istnieje wiele publicznych, sprawdzonych oraz jakościowych pluginów które mają to samo albo nawet więcej, niż to za co płaci się kilkaset złotych.
  10. zrdzn

    zmienna [wazne]

    Nie podam Tobie kodu na tacy, ale powiem Ci tylko tyle że musisz użyć Bukkit#dispatchCommand.
×
×
  • Dodaj nową pozycję...