Skocz do zawartości

LeviBoyPL

Użytkownik
  • Ilość zawartości

    718
  • Rejestracja

  • Ostatnia wizyta

  • Wygrane w rankingu

    15

Odpowiedzi społeczności

  1. LeviBoyPL odpowiedź w Błąd systemd w ubuntu wsl został oznaczony jako odpowiedź   
    https://askubuntu.com/a/1379567
  2. LeviBoyPL odpowiedź w Itemshop, a paysafecard został oznaczony jako odpowiedź   
    Wymiana barterowa (usługa za kod) narusza ToS psc. 
  3. LeviBoyPL odpowiedź w [Dynmap] jak zrobić nie widoczny świat został oznaczony jako odpowiedź   
    Za każdym razem nadpisujesz wartości z listy. Powinieneś zamiast tego tworzyć nowe listy. 
    worlds:   - name: world_nether   title: "world_nether"   enabled: false   - name: world_the_end   title: "world_the_end"   enabled: false  
  4. LeviBoyPL odpowiedź w Code Review. został oznaczony jako odpowiedź   
    1. Powinieneś użyć tzn. connection pool, czyli połączyć się z bazą x razy (najlepiej do ustawienia w configu). I później używać połączeń naprzemiennie, zapisując je w liście. Odciąży to "jedno połączenie" i dzięki temu, jeżeli będziesz wykonywał duże zapytanie, albo pare małych to zawsze zostanie wybrane połączenie, które nie jest zablokowane dla tego zapytania. 
    2. Używasz #prepareStatement, po czym nie używasz najważniejszej funkcji tej metody, czyli parametrów. W zapytaniu używasz znaków zapytania (?), każdy znak zapytania jest indeksowany od 1 w górę. Później dla każdego parametru używasz metody PreparedStatement#setString(1, uuid) analogicznie #setInt(2, kills), #setLong(3, lastLogin) itd..
    3. Konwencja nazewnictwa w sql (w pytaniu jest mysql, ale dotyczy to też sqlite i wielu innych języków sql) - https://stackoverflow.com/a/62706057
    4. Co do nazewnictwa to, niektóre nazwy atrybutów masz w liczbie mnogiej, a inne w pojedynczej - warto się zdecydować (Kills/BlockPlaced)
    5. Dobrą rzeczą jest używanie cache. Z tego co widzę to jest w porządku całkiem zakodzony, trochę dziwnie, ale jeżeli działa to spoko. 
     
    Ogólnie rzecz ujmując masz pojęcie i całkiem dobrze sobie radzisz. Jeżeli są to Twoje początki to prawdopodobnie tak wyglądałby kod osoby, która naczytała się poradników i oglądnęła jakieś kursy także jesteś na dobrej ścieżce rozwoju. Nic tylko życzyć powodzenia. 
     
    ps co do 2 to warto sobie przygotować metody select/update(String zapytanie, String ... argumenty) i później w pętli setować sobie wartości dla czystej wygody
  5. LeviBoyPL odpowiedź w Czat gracza po stronie klienta został oznaczony jako odpowiedź   
    ProtocolLib i PacketPlayOutChat to jest to czego szukasz, pole a będzie zawierać IChatBaseComponent, który zawiera tekst wiadomości. 
    To może Ci pomóc: https://wiki.vg/Protocol#Chat_Message_.28clientbound.29
  6. LeviBoyPL odpowiedź w Problem z plikiem plugin.yml został oznaczony jako odpowiedź   
    Przekonaj się
    W klasie main dodaj:

    @Override
    public onEnable() {
        System.out.println("działa");
    }
  7. LeviBoyPL odpowiedź w Coś wyskakującego ale nie error po przeładowaniu skrypta został oznaczony jako odpowiedź   
    set {_id} to inventory name of player's current inventory
  8. LeviBoyPL odpowiedź w Odczytanie wartości HashMapy został oznaczony jako odpowiedź   
    HashMapa może zapisywać jedynie typy Referencyjne, co oznacza, że zamiast zdefiniować typ zmiennej prymitywnej boolean powinieneś użyć Boolean. Żeby odczytać wartość z HashMapy używając klucza musisz jedynie skorzystać z metody HashMap#get(Object key). W Twoim przypadku będzie to dropMessage.get(p). Wtedy zwrócona wartość to właśnie Twój Boolean.
  9. LeviBoyPL odpowiedź w Problem z Pluginem KOD został oznaczony jako odpowiedź   
    Dzieje się tak, ponieważ istnieją dwie metody, które przyjmują różne argumenty (HashSet i Set), a podając nulla jako argument, IDE nie wie której metody chcesz użyć. Rozwiązaniem jest zcastowanie nulla do odpowiedniego typu zmiennej, na przykład (HashSet<Byte>) null
  10. LeviBoyPL odpowiedź w Przetłumaczenie i krótkie objaśnienie tych linijek został oznaczony jako odpowiedź   
    server { listen 443 ssl default_server; // nasłuchuj portu 443, używaj ssla (bezpiecznego połączenia) ssl_certificate /etc/letsencrypt/live/.ml-0002/fullchain.pem; # managed by Certbot // jako certyfikatu potwierdzenia tożsamości witryny używaj pliku w podanej lokalizacji ssl_certificate_key /etc/letsencrypt/live/.ml-0002/privkey.pem; # managed by Certbot ssl_stapling on; server_name .ml; root /var/www/stronaglowna; // folder główny strony index index.html; // plik, który jest domyślnym plikiem wybieranym przez serwer kiedy w query nie znajdzie się żaden plik (samo twojastrona.pl) location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/run/php/php7.0-fpm.sock; fastcgi_index index.php; include fastcgi_params; } }
    Więcej poczytać możesz tutaj http://nginx.org/en/docs/http/ngx_http_ssl_module.html
  11. LeviBoyPL odpowiedź w Wyłączenie VPS'a został oznaczony jako odpowiedź   
    To niezły odkop sprzed miesiąca, do tego nic nie wnoszący do tematu xd

    Dla ludzi, którzy będą szukać odpowiedzi: htop -> strzałkami szukacie procesu javy -> F9
  12. LeviBoyPL odpowiedź w Błąd z GUI został oznaczony jako odpowiedź   
    Bo tak to napisałeś?
    Kod z /pandora 
    RanksGUI.openGUI(p); Linijka 35
  13. LeviBoyPL odpowiedź w cooldown został oznaczony jako odpowiedź   
    Warto dopowiedzieć, że jeśli używasz poziomu języka co najmniej 8 to możesz użyć lambdy zamiast tworzyć nowy obiekt Runnable, czyli
    Bukkit#getScheduler().runTaskLater(plugin, ()-> { }, 20L);  
    A najlepiej byłoby, gdybyś utworzył sobie osobną klasę do tworzenia tasków, w niej w konstruktorze podał obiekt pluginu i dodał metody do łatwego tworzenia tasków
    public BukkitTask runTaskLater(Runnable var2, long var3) { return plugin.getServer().getScheduler().runTaskLater(plugin, var2, var3); }  
    Wtedy wystarczyłoby, że do konstruktora dodałbyś sobie tę klasę i wykonywał wcześniej napisane metody
    taskExecutor.runTaskLater(()-> player.sendMessage("test"), 10L);  
  14. LeviBoyPL odpowiedź w Co to za plugin? (WAŻNE) został oznaczony jako odpowiedź   
    Więc odpowiedź jest taka jaka napisałem - to nie jest plugin.
     
    //a sorki nie ogarnąłem na początku
    No tak jak napisałeś jest to "silnik" tyle, że nie jest to żaden spigot. To po prostu serwer, który odbiera i wysyła pakiety. Poszukaj po google "limbo" być może znajdziesz coś interesującego. Problem jest tylko taki, że większość tych serwerów jest przystosowana do dalszej rozbudowy pod siebie udostępniając jakieś API, a nie gotowe funkcje możliwe do skonfigurowania w configu.
  15. LeviBoyPL odpowiedź w czytanie wartości z bazy danych został oznaczony jako odpowiedź   
    Na przykładzie innego skripta
     
    function checkCoins(target: offline player) :: number: # getting saved amount of cash from target player set {_result::*} to objects in column "amount" from result of query "SELECT amount FROM cash WHERE uuid = '%uuid of {_target}%'" and close set {_amount} to "%{_result::*}%" parsed as number "%{_result::*}%" is "<none>": update "INSERT INTO cash (`uuid`, `amount`) VALUES ('%uuid of {_target}%', '0')" set {_amount} to 0 return {_amount}  
  16. LeviBoyPL odpowiedź w Szukanie danych w YALM został oznaczony jako odpowiedź   
    for (String key : yml.getKeys(true)) { int value = yml.getInt(key); System.out.println(key + ": " + value); } Nie polecam odczytywać/zapisywać danych bezpośrednio do pliku. Powinieneś jedynie przy starcie ładować dane do ramu, a później co jakiś czas je zapisywać.
  17. LeviBoyPL odpowiedź w Kursor został oznaczony jako odpowiedź   
    Można jak najbardziej, on any move jest jednym z rozwiązań, ale możesz użyć też every x ticks. Jak to ma działać? Zapisujesz aktualną lokację w jakiejś liście jeżeli jeszcze jej w niej nie ma, a jeżeli jest to porównujesz pitch aktualnej lokacji z pitchem zapisanej lokacji. Jeżeli aktualny pitch będzie mniejszy o x względem poprzedniej lokacji wtedy oznacza to że gracz prawdopodobnie skierował głowę w dół
  18. LeviBoyPL odpowiedź w plugin teleport za jakis koszt został oznaczony jako odpowiedź   
    Zależy jak chcesz, żeby to działało, ale jeżeli myślisz o komendzie to tworzysz sobie nową klasę i w niej implementujesz CommandExecutor
    public class SpawnCommand implements CommandExecutor { Później musisz nadpisać metodę onCommand
    @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { if(ok) { //zwracasz true jeżeli komenda została wykonana pomyślnie return true; } //zwracasz false jak komenda argumenty na przykład były złe //wtedy wysyła się command usage z plugin.yml return false; } Następnie w metodzie onEnable ustawiasz egzekutora komendy na tamtą klasę
    this.getCommand("spawn").setExecutor(new SpawnCommand()); I dodajesz komendę do plugin.yml
    commands: spawn: description: Opis komendy usage: to to o czym wspominalem wczesniej  
    Żeby sprawdzić czy gracz ma jeden emerald 
    player.getInventory().contains(Material.EMERALD, ile);  
  19. LeviBoyPL odpowiedź w bledy w konsoli został oznaczony jako odpowiedź   
    public class Main extends JavaPlugin { private static Main plugin; public void onEnable() { plugin = this; } } } tylko musisz sobie zrobić gettera do tego, albo podawać obiekt w konstruktorze 
  20. LeviBoyPL odpowiedź w Null pointer exception w pluginie został oznaczony jako odpowiedź   
    package pl.kangur88.dzikiepvp; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.scoreboard.DisplaySlot; import org.bukkit.scoreboard.Objective; import org.bukkit.scoreboard.Scoreboard; import org.bukkit.scoreboard.ScoreboardManager; public class Main extends JavaPlugin{ ScoreboardManager manager; Scoreboard board; @Override public void onEnable() { super.onEnable(); manager = Bukkit.getScoreboardManager(); board = manager.getNewScoreboard(); } @Override public void onLoad() { super.onLoad(); Objective objective = board.registerNewObjective("health", "health", "health"); objective.setDisplaySlot(DisplaySlot.BELOW_NAME); objective.setDisplayName("/ 20"); } @EventHandler public void damage(EntityDamageByEntityEvent e) { for(Player online : Bukkit.getOnlinePlayers()){ online.setScoreboard(board); online.setHealth(online.getHealth()); //Update their health } } }  
  21. LeviBoyPL odpowiedź w Blad z stoniarkami został oznaczony jako odpowiedź   
    Dobra, no to w tym stonestorage tworzysz sobie nową listę poprzez
    private ArrayList<Location> blocksLocations = new ArrayList<>();  
    i metody gettera w tej samej klasie
    public ArrayList<Location> getBlocksLocations() { return blocksLocations; }  
    I teraz w Twojej klasie main tworzysz sobie nową instancję
    private StoneStorage stoneStorage = new StoneStorage();  
    I teraz w miejscu gdzie rejestrujesz sobie listenery w main podajesz ten stone storage
    getServer().getPluginManager().registerEvents(new BreakListener(this, stoneStorage), this); getServer().getPluginManager().registerEvents(new PlaceListener(this, stoneStorage), this);  
    w konstruktorach listenetów podajesz sobie ten obiekt do zmiennej w klasie
     
    private Main plugin; private StoneStorage stoneStorage; public BlockPlace(Main m, StoneStorage stoneStorage) { this.plugin = m; this.stoneStorage = stoneStorage; }  
    i w listenerach najpierw dodajesz do listy w palce a w break sprawdzasz
     
    //dodawanie do listy stoneStorage.getBlocksLocations().add(block.getLocation()); //sprawdzanie czy obiekt jest w liście stoneStorage.getBlocksLocations().contains(block.getLocation()) { }  
  22. LeviBoyPL odpowiedź w Autoryzacja Discord został oznaczony jako odpowiedź   
    Mógłbyś chociaż poczytać co tam jest napisane, na sidebarze masz opcję OAuth2, to jej szukasz. Masz nawet rozpisane przykłady jak tego używać, jakie odpowiedzi zwraca i czego potrzebujesz, żeby zacząć.
  23. LeviBoyPL odpowiedź w Chat z minecraft na stronie internetowej został oznaczony jako odpowiedź   
    Piszesz sobie skrypt bądź plugin wpisujący zawartość wiadomości do pliku/bazy danych/czegokolwiek. Mając taki plik po prostu go echujesz phpem w wordpressie.
    https://forums.skunity.com/resources/reqn.95/
    https://forums.skunity.com/resources/skript-db.372/
    https://developer.wordpress.org/reference/functions/get_file_data/
    https://developer.wordpress.org/reference/classes/wpdb/
  24. LeviBoyPL odpowiedź w Prośba o pomoc został oznaczony jako odpowiedź   
    Sprawdź sobie jak tutaj jest to to zrobione
  25. LeviBoyPL odpowiedź w Could not pass event PlayerJoinEvent został oznaczony jako odpowiedź   
    DbConnector jest nullem, pokaż całą klasę
×
×
  • Dodaj nową pozycję...