Skocz do zawartości
  • 0

Zliczanie i zapisywanie ilości zniszczonych bloków cobblestone


xTea_199

Pytanie

Napisze ktoś kod na to że jeżeli gracz wykopie kamien to dodaje to do zmiennej i jak sie wpisze /x to wyswietla wykopany kamien

 

Chodzi mi o JAVE  nie skript

//Tytuł tematu. Jeśli chodzi Ci o javę, wybierz prefix "java" ~Myszak

Edytowane przez Myszak
Odnośnik do komentarza
Udostępnij na innych stronach

7 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

Witajcie Towarzyszu!

Nie do końca rozumiem co macie na myśli. Domyślam się, że chcecie zliczać ilość wykopanych bloków cobblestona (?). Przy każdym zniszczeniu cobblestone chcesz dodawać 1 do liczby już wcześniej zniszczonych klocków. Taka liczba będzie liczbą normalną, bez przecinków. Można wybrać integer jako typ przechowywania danych. Największa liczba jaką można w nim zapisać to 231 - 1 - inaczej 2147483647 - dlaczego minus 1? - Bo w Javie, jak i innych językach programowania liczymy od 0. Na pierwszy rzut oka wygląda to okej - Na serwerze dla prawidłowego zliczenia statystyk można wykopać ponad 2 miliardy bloków cobblestone. Do waszej oceny pozostawiam czy w tej liczbie się zmieścicie, czy nie, natomiast myślę, że serwer, na którym statystyki nie będą nigdy resetowane może to nie wystarczyć. Wtedy należy użyć long - potrafi on zapisać dwa razy większą liczbę.

No dobrze, wiemy jaki typ danych użyć do zapisu. Teraz trzeba to rzeczywiście zapisać - i powstaje pytanie jak to zrobić. Samo zapisanie zmiennej w pamięci zostanie z jej wymazane przy usunięciu obiektu w którym się znajduje (zrobi to za nas Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść! wbudowany w wirtualną maszynę Javy - JVM). Restart serwera, czy jak to zrobimy, usunięcie obiektu gracza wymaże wszystkiego statystyki. Zmienne zapisywane są w pamięci podręcznej - RAM maszyny, na którym serwer został postawiony.

Do przechowywania informacji o graczach (a pamiętajmy, że mogą to być ich ogromne ilość) należy użyć dysku twardego. Można to zrobić w pliku w na przykład "plugins/<your plugin>/players" - ma to jednak swoje wady. Po pierwsze występują trudności z backupowaniem danych. Nie zawsze istnieje potrzeba backupowania wszystkich plików serwera. Kolejną wadą jest uzależnienie działania serwera od działania tych danych. Jeżeli przypadkiem skończy nam się miejsce na dysku to nie dość, że popsuje nam się serwer, ale także i dane - nie będą koniecznie aktualne. Brak Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść! - dane przypisane będą jedynie do jednej instancji serwera Minecraft, brak możliwości rozbudowy tych danych do większej ilości serwerów. Myślę, że najlepszym, najszybszym i najwygodniejszym rozwiązaniem będzie zapis tych informacji w bazie danych. Tutaj mamy ogromne pole do popisu - wybór między serwerami baz danych opartych o język SQL, oraz tzw. bazy danych no-SQL, które na tym języku nie pracują. Teoretycznie bazy danych no-SQL są szybsze, natomiast to zależy także od ich konfiguracji i przeznaczenia. Wiele serwerów no-SQL (na przykład popularne MongoDB) nie jest relacyjne, natomiast oparte o dokumenty - to ma swoje wady jak i zalety. To samo z bazami danych które są relacyjne - na przykład MySQL czy MariaDB. Wybór bazy danych jest trudnym pytaniem, które będzie mogło mieć ogromny, czy kluczowy wpływ na rozwój naszej aplikacji. Wybór bazy danych wybieram wam. Jeżeli sobie życzycie mogę wypisać zalety i wady jednego i drugiego serwera bazy danych jaki i modelu przechowywania informacji (relacyjność/dokument).

Co tyczy się komendy /x wystarczy jedynie pobrać informacje z bazy danych oraz wydrukować je do gracza.

 

Pozdrawiam Czerwono!

Edytowane przez TheMolkaPL
Poprawa literówek
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
Godzinę temu, xTea_199 napisał:

Niestety nic nie rozumiem, ale chciałbym po prostu komendę, która pokazuje wykopany kamień :)

 

Choć zadanie jest niby proste, to jednak jej wykonanie już niekoniecznie bez gotowej architektury serwera. Jeżeli jest to nowy serwer to taką architekturę trzeba najpierw zbudować, co oczywiście nie jest tak prostym zadaniem. Zbudowanie architektury jest mocno uzależnione jaki serwer stawiamy, co na nim będzie się działo oraz jakie będzie miało on cechy. Nie ma możliwości zbudowania architektury idealnej. Każda jest uzależniona od trybu jaki prowadzimy. Architektury nie da się też wymyślić i zbudować w jeden dzień.

To wszystko sprowadza się do kilka czołowych pytań waszego problemu.

  • Gdzie to zapisać?
  • Jak to zapisać?
  • Kiedy to zapisać?

 

Opowiadając na te pytania można zbudować niewielki system tego zapisu, aczkolwiek nikt nie gwarantuje, że będzie miał dobre możliwości przyszłej rozbudowy.

Edytowane przez Myszak
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
13 minut temu, xTea_199 napisał:

ej TheMolkaPL jestem nowy w tych sprawach, wiesz może jak edytować (cały plugin) w eclipse?

Jest to prawdopodobnie zboczenie z tematu, aczkolwiek nie wiem co taki plugin zawiera, a może zawierać takie zliczanie ilości zniszczonych bloków cobblestone. Nie odstąpię więc od odpowiedzi. Pierwsze pytanie jakie sobie przede wszystkim zadamy to na jakiej licencji został stworzony plugin. Licencja jest warunkami korzystania z danego pluginu, lub jego części, możliwości zarobku na nim, edycji i co sobie w nim zażyczymy.

Wiele pluginów, jak nie większość z nich, przynajmniej tych ze SpigotMC i BukkitDev jest open-source, to znaczy otwarte oprogramowanie, czyli takie które mają otwarty kod źródłowy. Otwarty kod źródłowy nie koniecznie mówi, że możemy sobie go od tak użyć, czy edytować. Przykładem jest plugin Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!, które ma otwarty kod źródłowy, natomiast aby użyć go na serwerze publicznie dostępnym należy taki plugin wykupić.

Ale do rzeczy - jeżeli mamy odpowiednią licencję pluginu, lub pisemne pozwolenie jego autora na edycję należy pobierać jego kod źródłowy. Należy go zdobyć z na przykład repozytorium Git, który może być hostowany na GitHubie, lub wysłać o niego prośbę do autora pluginu. Pamiętaj, że zdekompilowany kod nigdy nie będzie ten sam! Kod Javy kompilowany jest do bytecode wirtualnej maszyny, którą posiadasz na swoim komputerze. Powrót z bytecode do Javy nigdy nie będzie taki jaki był ten kod oryginalnie. Zależnie od dekompilatora mogą także wystąpić większe lub mniejsze przy tym błędy. Użycie zdekompilowanego kodu jest wyjściem ostatecznym, gdy licencja pozwala na jego edycję, a kod nie jest dostępny, natomiast do autora nie ma żadnej możliwości kontaktu.

Kod źródłowy otwieramy w naszym IDE - tutaj Eclipse, edytujemy i kompilujemy. Tak o to wy edytowaliśmy plugin. Pamiętaj, że niektóre licencje mówią, że edytowany jego kod musi być publicznie dostępny. Takiej licencji - GPL-3.0 - używa przykładowo sławny plugin Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!.

 

Pozdrawiam Czerwono!

Edytowane przez TheMolkaPL
to -> co
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

Kolega po prostu potrzebuje najzwyklejszy w życiu licznik napisany najprawdopodobniej przy pomocy dowolnej działającej metody zapisu danych.
Czytałem Panie @TheMolkaPL co pisałeś i moim zdaniem wymądrzasz się, a w dodatku piszesz głupoty, odnośnie możliwości zapełnienia pamięci maszyny, a zdarza się to niezwykle rzadko.
Dobry zarządca dba o to, aby do takich zdarzeń nie dochodziło i jakie znaczenie w tym przypadku może mieć sql, to znaczy sugerujesz, że jeżeli ktoś nie ma wolnej pamięci to może w bazie danych zapisywać dane, mimo zapełnionej pamięci?

Daj znać @xTea_199 czy nadal potrzebujesz tego plugin'u, postaram się go napisać dla Ciebie, jeśli czas mi na to pozwoli, bo jest to dosłownie 5 minut roboty.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
2 godziny temu, MaRsOnIx napisał:

Kolega po prostu potrzebuje najzwyklejszy w życiu licznik napisany najprawdopodobniej przy pomocy dowolnej działającej metody zapisu danych.

Owszem, ale właśnie kwestia metody zapisu jest tu kluczowa. Dodatkowo dochodzi do tego mała znajomość infrastruktury danego serwera. Informacji nigdy się nie powtarza, od tego są relacje, a te znajdują się już w innej tabeli, nie koniecznie od tego pluginu.

 

2 godziny temu, MaRsOnIx napisał:

Czytałem Panie @TheMolkaPL co pisałeś i moim zdaniem wymądrzasz się

Jeżeli uważacie Towarzyszu że przekazując moją wiedzę wymądrzam się to podajcie przykład.

 

2 godziny temu, MaRsOnIx napisał:

a w dodatku piszesz głupoty, odnośnie możliwości zapełnienia pamięci maszyny, a zdarza się to niezwykle rzadko.

"zapełnienia pamięci maszyny" możecie mi zdefiniować co to znaczy? Może chodzi o różnice między int32 i int64? No właśnie... jeżeli statystyki serwera nie są resetowane, to po dłuższym czasie rzeczywiście ktoś może wykopać ponad 2 miliardy bloków. Dla przykładu podam znany nam wszystkim serwis YouTube. Przy jego programowaniu na pewno powstało pytanie - czy jakiś film, kiedykolwiek, zdoła zdobyć ponad 2 147 483 647 wyświetleń? Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!

 

2 godziny temu, MaRsOnIx napisał:

Dobry zarządca dba o to, aby do takich zdarzeń nie dochodziło

Dobry programista pisze taki kod, aby do takich zdarzeń nie dochodziło. ;)

 

2 godziny temu, MaRsOnIx napisał:

jakie znaczenie w tym przypadku może mieć sql

Język SQL także posiada swoje typy danych. Baza danych też potrzebuje w jakiś sposób te dane zapisać, czyż nie? Jest różnica między typem danych INT, czy INTEGER a BIGINT, czy BIGINTEGERZarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!

 

2 godziny temu, MaRsOnIx napisał:

to znaczy sugerujesz, że jeżeli ktoś nie ma wolnej pamięci to może w bazie danych zapisywać dane, mimo zapełnionej pamięci?

Tu wolne miejsce w pamięci nie gra żadnej roli. Tutaj chodzi o Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!.

 

Mam nadzieję, że wytłumaczyłem, Pozdrawiam Robotniczo!

 

Odnośnik do komentarza
Udostępnij na innych stronach

Nieaktywny
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...