-
Ilość zawartości
284 -
Rejestracja
-
Ostatnia wizyta
-
Wygrane w rankingu
5
Treść opublikowana przez GotoFinal
-
@_SmileCraft_ No tak właściwie to jest szybsze jest w jednym pliku kiedy chcesz robić topkę. Ogólnie to baza danych byłaby tutaj dobrym rozwiązaniem, ale można też plikami, tylko właśnie jest trudniej zrobić to optymalnie, bo wczytywanie wszystkich plików potrwa, trzeba to robić jak essentials, w async tasku wczytywać wszystkich graczy i układać topkę, a potem albo ją bezpośrednio aktualizować, albo co kilka minut wczytywać od nowa... od biedy może to być nawet SQLite czyli baza danych w pliku. Chyba ze chce sie ładować dane wszystkich graczy - tych danych zazwyczaj nie ma jakoś super dużo, więc to nie jest problem, ale jednak może nim być jak ilośc danych wzrośnie - ale wtedy można podzielić dane na te ładowane zawsze i te dopiero przy wejściu. Dodatkowo nie widze sensu zapisu w stringu x/y/z, rozdziel to na osobne pola: gracz: punkty: costam: costam: Do tego nie robi się tego tak: new File("plugins" + File.separator + "scGuilds", "players.yml"); jest specjalna metoda plugin.getDataFolder() i wtedy można new File(plugin.getDataFolder(), "players.yml");
-
a pokaż plugin.yml
-
po co sprawdzasz czy gracz jest instancją gracza? Możesz spróbować wrzucić otwieranie inventory do taska, by było opóźnione o np jeden tick, pewnie wina starej wersji silnika.
-
Problem z liczbą np. 18.1931361 itd
GotoFinal odpowiedział(a) na ihn04849 pytanie w Pytania i problemy
@yooniks Tak się nie formatuje liczb, bo nagle wyjdzie różnie zależnie od wartości i do tego niepoprawnie zaokrągla... Są specjalne klasy od tego, i wtedy można wygodnie ustalić format np 00.00 - zawsze dwa miejsca po przecinku, czy też zdecydowac że niektóre są opcjonalne. A klasa sama ogarnie zaokrąglenie. @LloydPL a jak chce się do integera to są gotowe funkcje od zaokrąglania i nie ma potrzeby wrapować do integera -
ConcurrentHashMap vs HashMap
GotoFinal odpowiedział(a) na JanekMaSkrypta_ pytanie w Pytania i problemy
@JanekMaSkrypta_ ConcurrentHashMap drobnym kosztem wydajności i pamięciowym wspiera operacje z wielu wątków bez blokowania ich za pomocą atomowych operacji CAS. Jednak warto zaznaczyć że nie mamy wtedy gwarancji co tak na prawdę zobaczymy w takiej mapie, jeśli w trakcie iteracji po mapie w wątku A zostaje dodana nowa wartość w wątku B to nie ma żadnej pewności czy dodany obiekt też będzie elementem tej iteracji czy nie - zależy czy nowy obiekt wyląduje w przed czy za wskaźnikiem iteratora. Zazwyczaj nie mamy takiej konieczności by ta wartość tam od razu była, ale czasem jednak jedyne dobre wyjście to synchronizacja HashMapy zamiast użycia concurrent. Tak samo można taką mapę edytować w trakcie iteracji z tego samego wątku - co w przypadku zwykłej hash mapy wywali błąd CME. Dodatkowo mapa Concurrent nie wspiera ani kluczy ani wartości nullowych - gdzie w HashMapie można do klucza przypisać wartość null, czy też wartość do klucza o watości null. -
Problem z liczbą np. 18.1931361 itd
GotoFinal odpowiedział(a) na ihn04849 pytanie w Pytania i problemy
@KrejzolekPRO wat? przecież to nie ma znaczenia, co najwyżej to właśnie double może mieć jeszcze więcej miejsc po przecinku. @ihn04849 no jak ty piszesz ten kod to użyj klasy DecimalFormat - pamiętaj że format wystraczy stworzyć raz w jakiejś globalnej zmiennej, nie ma sensu tworzyć za każdym razem nowego. http://www.tech-recipes.com/rx/1326/java-decimal-format-to-easily-create-custom-output/ tu masz przykład, a w dokumentacji javy znajdziesz też wszystkie możliwości formatu -
nie trzeba rejestrować głównej klasy jako command executora @yooniks ...
-
Tworzenie bloku tylko dla Jednego gracza w danej lokacji
GotoFinal odpowiedział(a) na XXXXXXXXXX pytanie w Pytania i problemy
ale jaki dokładnie masz tu problem? czego nie umiesz zrobić? jaki masz już kod? no chyba że czekasz na gotowca i tyle, to mi się nie chce. Ale tak to żaden problem, w tasku co np 5 ticków pobierasz block na jaki patrzy gracz - jest od tego metoda getTargetBlock w Playerze (a nawet niżej), wtedy pobierasz ten wyższy, ustawiasz na TNT i zapisujesz lokalizacje do jakiejś mapy Map<UUID, Block> wtedy na początku tego tasku sprawdzasz czy dla danego gracza blok jest już wybrany, i jak nowy jest inny - to usuwasz stary. -
Pewnie masz bardzo stara wersję spigota/bukkita, a tak to wkleja się całe logi by właśnie widzieć od razu takie rzeczy...
-
Java android sdk menager jak to pobrac?
GotoFinal odpowiedział(a) na Wakal pytanie w Pytania i problemy
pisz jak człowiek w Android Studio, 100x lepsze IDE, a wsparcia do eclipse już Android nie ma oficjalnego, -
[Java][Android] Progam do robienia gier android
GotoFinal odpowiedział(a) na Wakal pytanie w Pytania i problemy
Intellij lub AndroidStudio (Android studio to intellij ale z delikatnie inaczej ułożonym GUI i kilka takich zmian, po prostu dostosowane czysto pod androida, gdzie intellij ma narzędzia do wszystkiego) Jak masz intellij to raczej nie ma sensu osobno instalować AndroidStudio -
jakimś skryptem bo autor dodatku do skripta skquery zrypał swój dodatek i nie wyświetla normlanego błędu
-
Zarobi z takiego serwera są gigantyczne, przeważnie od 200-900 złotych. @cccdom21 Nie podałeś w jakim czasie, na dzień? miesiąc? Bo tyle to normalny programista bierze za max tydzień roboczy (początkujący i myśląc o górnej granicy). Więc jak to kwota która zarabiasz co miesiąc, to nie wystarczy nawet na jednego normalnego programistę, tylko na jakiegoś typowego gimbusa uczącego się programować. Nawet początkujący programiści na rynku mogą liczyć na te 3000 na rękę miesięcznie, a to jakieś 150 na dzień (i mówię tutaj o kwocie na rękę, a jak to legalna praca to dochodzą podatki i zusy i rzeczywiście wydajesz na taką osobę ponad 200 na dzień), a normalne stawki są już raczej dwukrotnie większe. No i oczywiście znacznie większe dla bardzo doświadczonych osób. Więc jak ta stawka jest na dzień, to spoko, kogoś tam znajdziesz porządnego, ale jak na miesiąc... to to nie są gigantyczne tylko bardzo niskie.
-
Nooo, to masz spory problem Masz 3 opcje, wszystkie niezbyt dobre, ale zacznijmy od tego czy na pewno tego potrzebujesz? teoretycznie spigot powinien stackować itemu. 1. Symulujesz drop samemu, anulujesz BlockBreakEvent i sam symulujesz drop, z tym że nie dość ze to masa kodu by symulować wszystke możliwe dropy z enchantami, to jeszcze psujesz kompatybilność z innymi pluginami które mogą nasłuchiwać tego eventu, bo nie będą się spodziewały zniszczenia bloku pomimo anulowania eventu. 2. Musisz pogrzebać w NMS i znaleźć tam funkcje odpowiedzialną za generowanie dropu i wywołać ją ręcznie - tutaj niestety nie jestem pewien jak, dokładnie czegoś takiego nie robiłem, ja się zadowalałem symolwaniem zniszczenia bloku, ale to co innego. 3. I chyba najprościej, możesz spróbować stackować itemy blisko siebie w ItemSpawnEvent z dodatkowym wsparciem na stackowanie itemów powyżej 64, ale wydaje mi się że spigot już to powinien robić za ciebie, ogarnij config spigota, moze coś znajdziesz by to lepiej skonfigurować.
-
niestety nie idzie tego normalnie zrobić, może podaj jaki masz dokładnie cel, jaki plugin robisz, to ci może dam trochę rad jak to najlepiej osiągnąć, ale na pewno albo będzie to niewygodne, albo wymagało użycia NMS itd. Już różne takie zabawki musiałem robić, to pewnie skojarzę co wtedy wybrałem, ale potrzebuje lepszego opisu co tworzysz.
-
no to nullem jest zmienna "msg"
-
no i która to 32 linijka?
-
no niezbyt.... + do rejestrowana komend powinno się używac plugin.yml, a tutaj to nawet źle robisz, bo nie dodajesz komendy poprawnie. Caused by: java.lang.NullPointerException at hcode.nikus.tools.cmd.Command.execute(Command.java:32) ~[?:?] przecież tutaj w błędzie masz napisane gdzie jest błąd, dokładną klasę, metodę i linijkę (linijkę z klasy, nie metody) + masz samą nazwę błędu "java.lang.NullPointerException" - czyli coś czego użyłeś w tej linijce jest nullem.
-
bardzo ładny bład, podoba mi się. A z czym pomóc? chcesz go pokolorować? ja bym wybrał różowy i niebieski, i może zielony by podkreślić detale takie jak "at" czy nawiasy. Mam nadzieję ze to ci pomogło. Bo nie wiem co innego możemy zrobić z samym błedem.
-
umiesz może czytać? masz w linku cały przykład jak to zrobić... https://www.mkyong.com/jdbc/jdbc-preparedstatement-example-batch-update/ private static void batchInsertRecordsIntoTable() throws SQLException { Connection dbConnection = // połączenie z bazą PreparedStatement preparedStatement = null; String insertTableSQL = "INSERT INTO DBUSER" + "(USER_ID, USERNAME, CREATED_BY, CREATED_DATE) VALUES" + "(?,?,?,?)"; // pytajniki zastępują tutaj wartości, zmień na swojego inserta ale też użyj pytajników zamiast wartości try { preparedStatement = dbConnection.prepareStatement(insertTableSQL); // i ustawiasz kolejne wartości, pierwsza zminna to numer pytajnika preparedStatement.setInt(1, 101); preparedStatement.setString(2, "mkyong101"); preparedStatement.setString(3, "system"); preparedStatement.setTimestamp(4, getCurrentTimeStamp()); // i dodajesz do batcha preparedStatement.addBatch(); // i możesz tak robić w pętli na wszystkich graczy // i za pętlą wtedy wykonujesz całość preparedStatement.executeBatch(); } catch (SQLException e) { // to jakoś powinieneś ładnie obsłużyć błąd, np ponawiając próbe dodania i wypritnowanie exception do konosli na zapas e.printStackTrace(); } }
-
no przecież napisałem jaki jest problem... tak gdzie ustawiasz bana do bazy... użyj prepared statement to nie będziesz miał takich problemow
-
taaa, nie możesz, straszne, na pewno ktoś by potrzebował nazwy pola w bazie, ech co za rak. A warto by wiedzieć co masz w tych stringach bo jest duża szansa ze mogą być one użyte by nawet przejąć kontrolę nad twoją bazą danych - bo robisz wszystko w najgorszy możliwy sposób. poczytaj o PreparedStatement, a tak to problem masz taki że próbujesz ustawić pole w bazie "banned" na string o wartości "false", a to tak nie może zadziałać, bo przecież typ tej kolumny to boolean a nie string. poczytaj też o operacjach batch, bo robienie save dla każdego usera w osobnym requeście to też zły pomysł. Więc ogólnie użyj PreparedStatement z batch i wszystko się naprawi. https://www.mkyong.com/jdbc/jdbc-preparedstatement-example-batch-update/ PS: zapomniałeś o s1 = setlayerArenaName I CO TERAZ?!?!?!?!!!?
-
wklej cały kod albo ... idz na inne forum i nie marnuj czasu tym co chcą pomagać...
-
no a gdzie kod od tego jak używasz samej bazy? czyli ta metoda z at pl.main.Main.saveData(Main.java:140)
-
a po co używasz regexa? użyj normlanej metody .replace, a tak to string jest immutable, więc jak robisz str.replace(...) to powstaje nowy String, a stary zostaje bez zmian, musisz więcej przypisać to znowu do zmiennej, tak jak dałem w przykładzie niżej. A do tego do poprawienia kolorków jest specjalna metoda: String msg = "&7..."; msg = ChatColor.translateAlternateColorCodes('&', msg); // i wynik tej meotdy znowu ląduje w "msg"
