-
Ilość zawartości
536 -
Rejestracja
-
Ostatnia wizyta
-
Wygrane w rankingu
13
Treść opublikowana przez TheMolkaPL
-
Ależ oczywiście, że jest. Dotyczy ona wszystkich wersji stworzonych przez Mojang, więc tak na prawdę wszystkich.
-
To jest pay2win, więc łamanie EULA. To oznacza, że nie ma potrzeby pisania takiej funkcji, ponieważ nie jest zgodna z umową licencyjną.
-
No to już masz wszystko wypisane wraz z przykładami w dokumentacji tych dwóch klas. Wystarczy się tylko do nich dostosować. Jeżeli masz jakieś problemy to sprawdź czy wszystkie obiekty które próbujesz zapisać implementują Serializable - inaczej wystąpi wyjątek NotSerializableException.
-
To jeszcze powiedz mi w jakim byś chciał to formacie zapisać. Jest ich na prawdę masa, do wielu z nich są biblioteki do ich obsługi, kilka z nich można obsłużyć prosto ze standardowej biblioteki. Oczywiście można użyć ObjectOutputStream (do zapisu) oraz ObjectInputStream (do odczytu), wtedy będziemy mieli unikalny "format" dla naszego pliku, poprzez wygenerowane przez nas unikalne ID serializacji. Dokumentacja interfejsu Serializable mówi o tym ID następująco:
-
Szczerze to nie rozumiem za bardzo w czym leży problem i jakiej pomocy Towarzyszu oczekujesz. Czy chodzi może o serializację, czyli zapis danych do pliku?
-
Nie ma sprawy Towarzyszu! Jak masz kolejne pytania lub problemy to wal śmiało Pozdrawiam Czerwono!
-
Niech sobie działa i nie działa. On desynchronizuje jedynie klienta do serwera i nic więcej. Serwer sam oblicza życie graczy oraz zadawany im damage. Nie da się tego obejść, ponieważ jest to strona serwera, nie klienta.
-
Serwer sam wylicza życie graczy i entity, więc taki "antycheat" jest zbędny. Jeżeli taka modyfikacja jednak by istniała to jedynie zdesynchronizuje ona klienta z serwera i nie będzie miało to żadnego wpływu na grę na serwerze i innych połączonych do niej graczy.
-
Musisz porównać lokację - dokładnie X, Y i Z jako liczby pełne (int). Nie porównuj całych lokacji, bo wlicza się w nie także yaw i pitch. Jakieś 90% serwerów ma Essentials i bardzo dużo "techników" nie zna jego możliwości. Często nawet nie wchodzą do jego konfiguracji. Potem widzi się na serwerach dodatkowe pluginy na ukrywanie wiadomości joined/left, ColoredSigns, itd. Już nie mówiąc o masie pytań jak zmienić prefiks pod /nick, a przecież jest to na początku pliku konfiguracyjnego. Dodatkowo konfiguracja Essentials jest banalnie prosta. Komentarze tam zawarte tłumaczą każde ustawienie od totalnych podstaw. Kity czy inne funkcję dodatkowo mają wiki na stronie Essentials. Podałem właśnie plugin Essentials bo ma on już taką funkcję, w wiele osób o tym może nie wiedzieć.
-
Nawet nie ma wsparcia nazwy trybów. Nie wspominając o braku możliwość włączenia spectatora. W ogóle wytłumacz mi po co miałbym to instalować skoro dużo lepsze działanie tej komendy już mam w Essentials i/lub CommandBooku? Poza tym masz masę błędów... Zdecyduj się czy tryb gry robisz po angielsku, czy po polsku - "kreatywny", "survival". "Zminiels" "Adwenture" co? O__o chyba adventure...
-
Masz to w Essentials...
-
Plugin na tnt od danej do danej godziny
TheMolkaPL odpowiedział(a) na ProX3Q pytanie w Pytania i problemy
Towarzyszu to nie jest plugin tylko skrypt. Inaczej konfiguracja do jakiegoś pluginu. -------------------------------------------------- Ten problem można rozwiązać na dwa sposoby. Jeden to blokowanie stawiania TNT oraz jego wybuchania. Drugie to tylko jego wybuchania. Osobiście preferuje to pierwsze, ponieważ można wtedy do gracza wysłać bezpośrednią wiadomość o wyłączonym TNT. Do zarządzania czasem na serwerze będziesz potrzebował klasy Calendar. Dzięki temu będziesz mógł porównać godziny do tych podanych w pliku konfiguracyjnym (oczywiście możesz je zapisać na twardo w kodzie (tzw. hard-coded), ale moje osobiste doświadczenia pokazują, że jest to jeden z największych błędów). Po porównaniu możesz zwrócić prawdę (true), lub fałsz (false) jako rezultat tej metody. Drugą częścią tego kodu będą słuchacze (listenery), które będą śledzić serwer i nasłuchiwać podanych przez wydarzeń w jego logice. Możesz nasłuchiwać BlockPlaceEvent (nadawany przy postawieniu bloku przez gracza), ExplosionPrimeEvent (nadawany przy odpaleniu TNT - patrz niżej), EntityExplodeEvent (kiedy TNT ale także i creeper wybucha), EntityChangeBlockEvent (kiedy enderman będzie próbował postawić TNT) oraz BlockDispenseEvent (kiedy blok zostanie postawiony przez dispenser). Myślę, że to już wszystko. Pamiętaj, że o czymś mogłem zapomnieć. ExplosionPrimeEvent: nadawany przy odpaleniu TNT, jego aktywacji. Musimy nasłuchiwać to zdarzenie, ponieważ TNT mogło zostać postawione w czasie włączonego TNT na serwerze, natomiast odpalone poprzez redstone lub palącą się strzałę, co doprowadziło do jego aktywacji. Jeżeli wszystkie dane w zdarzeniu zostały sprawdzone (jest to TNT) możesz sprawdzić czy zostało wykonane w odpowiednim przedziale czasowym. Jeżeli nie to anulujesz event i w miarę możliwości próbujesz wysłać do gracza wiadomość o wyłączonym TNT. Myślę, że pomogłem! Pozdrawiam Czerwono Towarzyszu! -
Ale jakiś powód tego jest? Czy tylko dlatego bo serwer X tak robi? Sam się właśnie ciekawie dlaczego ludzie blokują dostęp do /plugins, /version i tym podobne.
-
O matko zbanowali mnie. To pewnie znowu wina tych burżujów. Co ja teraz zrobię. Co za chujowy serwer, jak mogli mnie zbanować. Idę go zhejtować gdzieś na forum. Niech mają nauczkę. Następnym razem (może) nie będą mnie banować.
-
Nie łatwiej, prościej i wygodniej zabrać graczom uprawnienie bukkit.command.plugins?... To pierwsza rzecz. Druga to taka w jakim celu się je blokuje? /plugins jest bardzo dużym podziękowaniem programistom za otwarty kod źródłowy pluginów. Dla przykładu taki WorldEdit, gdzie główny autor, sk89q włożył w niego bardzo dużo pracy, nie zarobił na tym też ani centa. Napisał w nim ponad 250 tysięcy linijek kodu. Nie licząc oczywiście innych projektów, takich jak WorldGuard, CommandBook, CommandHelper czy CraftBook. Nie wspominam o tym, że bardzo często przyczyniał się do powstawania samego Bukkita. Jest autorem całego systemu zdarzeń tam zawartego. Ogólnie rzecz biorąc ukrywanie pluginów jest chamskie, ponieważ wstydzisz się swojego oprogramowania na serwerze. Bardzo często takie serwer, które pluginy ukrywają chwalą się, że mają "autorskie", a tak na prawdę wszystkie z nich są z Bukkit Dev, reszta to skrypty. Sam tworze właśnie swój mały serwer i nie blokuje na nim podglądu pluginów. W taki to o to sposób mogę bezpłatnie podziękować autorom pluginów za ich wkład w działanie mojego serwera. Który bez nich na pewno funkcjonowałby inaczej. Wyobrażasz sobie serwer bez NoCheatPlusa? WorldEdita?
-
Nigdy nie wysyłaj do graczy w ten sposób ich IP? Co gdy chciałby zrobić screenshota, albo nagrać film z serwera?
-
Możesz wysłać z poziomu Twojego pluginu pakiet do serwera bez użycia sieci, po prostu do metody w parametrze dajesz fake-pakiet, który klient nidy nie wysłał. Nie wiem czy da się to zrobić w Skript i jego dodatkach. Co do wymuszenia ruchu to dałoby się co tick tego gracza teleportować co kilka pikseli, więc byłaby dość realna animacja chodzenia dla gracza i innych na serwerze.
-
Witajcie Czerwono Towarzysze! W tym poradniku przedstawię Wam jak łączyć graczy z innym serwerem podpiętym do BungeeCord. Przydatne na przykład do łączenia graczy z serwera lobby na inne serwery (oraz vice-versa). Do dzieła! Chcesz wykonać instrukcję przeniesienia gracza na inny serwer. Na początku musisz jednak zrozumieć czym jest serwer, na przykład na silniku Spigot i czym jest BungeeCord. Bez tej wiedzy nieudolnie będziesz próbować różnych sztuczek z przenoszeniem na inny serwer. Na początku spróbuje tą trochę zobrazować. Prawdopodobnie wyobrażasz sobie, że BungeeCord działa na następującej zasadzie. Janusz wchodzi na serwer poprzez połączenie się przez BungeeCorda, następnie na serwerze (który jest serwerem lobby) wybiera inny serwer, więc ten go łączy. [CIACH] Jest to błąd bo serwer nie wysyła graczy na inny serwer. Wszystko robi BungeeCord. Serwer lobby jest kolejnym serwerem który działa na takiej samej zasadzie jak inne w tej samej sieci. Działa ona na identycznej zasadzie jak Creative, Free Build czy Survival. [CIACH] Aby móc przenieść Towarzysza Sebastian z serwera Lobby na serwer Creative należy do BungeeCord wysłać taką instrukcję. Tylko on przekierowuje połączenia i tylko on może przenosić graczy między serwerami. BungeeCord jest proxy między klientem, czyli Sebastianem, a fizycznym serwerem, czyli Lobby. Komendy BungeeCord, takie jak /end, /perms, /server, /find czy /alert są zatem komendami na proxy, a nie na serwerze. Co to oznacza? Klient z serwerem (i vice versa) komunikuje się za pomocą pakietów, czyli małych paczuszek z danymi. Może to być informacja o postawieniu klocka na mapie, ruszeniu się gracza, czy jego interakcji w świat. Towarzysz, na przykład Grażyna wpisuje na chacie komendę /server, klient do wysyła do serwera pakiet o wykonaniu komendy. Pakiet dociera do BungeeCorda, ten go otwiera i sprawdza czym on tak na prawdę jest. Widzi, że użyto komendy /server. Sprawdza on czy u siebie ma taką zarejestrowaną komendę. Jeśli nie wysyła ten pakiet dalej na serwer. Jeśli tak do ją wykonuje. To wszystko sprowadza się do tego, że serwer nie może wykonać za gracza komendy, bo musi ona zostać przesłana pakietem. Pakiet musi przejść przez proxy BungeeCorda. Wykonanie takiej czynności całkowicie więc odpada. BungeeCord natomiast oferuje wysyłanie danych między sobą a serwerem. Jest to tak zwany "Plugin Messaging Channel". Teraz pokażę Ci jak to zrobić Towarzyszu. 1. Najpierw musisz zarejestrować ten kanał w swoim pluginie. Najlepiej wykonać to w Twoim onEnable(): @Override public void onEnable() { this.getServer().getMessenger().registerOutgoingPluginChannel(this, BungeeConector.PLUGIN_CHANNEL); } 2. Teraz należy stworzyć sobie klasę BungeeConnector w Twoim projekcie. Będzie ona miała za zadanie łączyć wybranych graczy z wybranym przez ciebie serwerem. /** * Connect players between servers within the BungeeCord proxy. */ public class BungeeConnector { public static final String PLUGIN_CHANNEL = "BungeeCord"; private final Plugin plugin; public BungeeConnector(Plugin plugin) { this.plugin = plugin; } /** * Connect given <code>player</code> into the given <code>target</code> server. * @param player {@link Player} who should be connected. * @param target The target server identifier specified in the BungeeCord proxy configuration. */ public void connect(Player player, String target) { ByteArrayOutputStream array = new ByteArrayOutputStream(); DataOutputStream output = new DataOutputStream(array); try { output.writeUTF("Connect"); output.writeUTF(target); } catch (IOException ignored) { } player.sendPluginMessage(this.plugin, PLUGIN_CHANNEL, array.toByteArray()); } } 3. W głównej klasie Twojego pluginu możesz sobie zrobić instancję tej klasy. W tym celu na górze zrób sobie zmienną ją przetrzymującą. private BungeeConnector connector; 4. W onEnable() definiuj zmienną do jej prawidłowej wartości. @Override public void onEnable() { this.connector = new BungeeConnector(this); this.getServer().getMessenger().registerOutgoingPluginChannel(this, BungeeConector.PLUGIN_CHANNEL); // to już było wcześniej } 5. Teraz wystarczy już tylko zrobić sobie do niej getter. public BungeeConnector getConnector() { return this.connector; } I gotowe! Oczywiście można by to jeszcze ulepszyć, na przykład w connect(...) dodać anulowalny event. Dzięki temu można by go anulować w pewnych przypadkach. Na przykład gdy na serwerze jest anti-logout, a Ty nie chcesz żeby w czasie PvP mógł się przenosić między serwerami. Aby połączyć gracza z serwerem wystarczy użyć this.getConnector().connect(player, "survival"); Dzięki temu gracz połączy się z serwerem Survival. Zgodnie z zaleceniami konfiguracyjnymi serwery powinny zostać nazwane całkowicie małymi literami. Podana tutaj nazwa serwera odpowiada tej podanej w pliku config.yml BungeeCorda. Pozdrawiam Czerwono
- 4 odpowiedzi
-
- bungee
- bungeecord
-
(i 2 więcej)
Oznaczone tagami:
-
Komenda wykonywana przez Console
TheMolkaPL odpowiedział(a) na Killerek01 pytanie w Pytania i problemy
Nie ma sprawy Towarzyszu Jak masz jakiś problem to pisz na forum, a wszystko się razem Robotniczo rozwiąże! -
Najpierw Towarzyszu wytłumacz czym jest ten Gamemode. Jeżeli chodzi Ci o tryby gry, takie jak survival, creative, itd, to nie da się tego "napisać". Są to już zapisane w serwerze zapisane tryby wraz z implementacją u klienta. Nie da się po prostu dopisać swoich własnych.
-
Komenda wykonywana przez Console
TheMolkaPL odpowiedział(a) na Killerek01 pytanie w Pytania i problemy
Chcesz wykonać instrukcję przeniesienia gracza na inny serwer. Na początku musisz jednak zrozumieć czym jest serwer, na przykład na silniku Spigot i czym jest BungeeCord. Bez tej wiedzy nieudolnie będziesz próbować różnych sztuczek z przenoszeniem na inny serwer. Na początku spróbuje tą trochę zobrazować. Prawdopodobnie wyobrażasz sobie, że BungeeCord działa na następującej zasadzie. Janusz wchodzi na serwer poprzez połączenie się przez BungeeCorda, następnie na serwerze (który jest serwerem lobby) wybiera inny serwer, więc ten go łączy. Jest to błąd bo serwer nie wysyła graczy na inny serwer. Wszystko robi BungeeCord. Serwer lobby jest kolejnym serwerem który działa na takiej samej zasadzie jak inne w tej samej sieci. Działa ona na identycznej zasadzie jak Creative, Free Build czy Survival. Aby móc przenieść Towarzysza Sebastian z serwera Lobby na serwer Creative należy do BungeeCord wysłać taką instrukcję. Tylko on przekierowuje połączenia i tylko on może przenosić graczy między serwerami. BungeeCord jest proxy między klientem, czyli Sebastianem, a fizycznym serwerem, czyli Lobby. Komendy BungeeCord, takie jak /end, /perms, /server, /find czy /alert są zatem komendami na proxy, a nie na serwerze. Co to oznacza? Klient z serwerem (i vice versa) komunikuje się za pomocą pakietów, czyli małych paczuszek z danymi. Może to być informacja o postawieniu klocka na mapie, ruszeniu się gracza, czy jego interakcji w świat. Towarzysz, na przykład Grażyna wpisuje na chacie komendę /server, klient do wysyła do serwera pakiet o wykonaniu komendy. Pakiet dociera do BungeeCorda, ten go otwiera i sprawdza czym on tak na prawdę jest. Widzi, że użyto komendy /server. Sprawdza on czy u siebie ma taką zarejestrowaną komendę. Jeśli nie wysyła ten pakiet dalej na serwer. Jeśli tak do ją wykonuje. To wszystko sprowadza się do tego, że serwer nie może wykonać za gracza komendy, bo musi ona zostać przesłana pakietem. Pakiet musi przejść przez proxy BungeeCorda. Wykonanie takiej czynności całkowicie więc odpada. BungeeCord natomiast oferuje wysyłanie danych między sobą a serwerem. Jest to tak zwany "Plugin Messaging Channel". Teraz pokażę Ci jak to zrobić Towarzyszu. 1. Najpierw musisz zarejestrować ten kanał w swoim pluginie. Najlepiej wykonać to w Twoim onEnable(): @Override public void onEnable() { this.getServer().getMessenger().registerOutgoingPluginChannel(this, BungeeConector.PLUGIN_CHANNEL); } 2. Teraz należy stworzyć sobie klasę BungeeConnector w Twoim projekcie. Będzie ona miała za zadanie łączyć wybranych graczy z wybranym przez ciebie serwerem. /** * Connect players between servers within the BungeeCord proxy. */ public class BungeeConnector { public static final String PLUGIN_CHANNEL = "BungeeCord"; private final Plugin plugin; public BungeeConnector(Plugin plugin) { this.plugin = plugin; } /** * Connect given <code>player</code> into the given <code>target</code> server. * @param player {@link Player} who should be connected. * @param target The target server identifier specified in the BungeeCord proxy configuration. */ public void connect(Player player, String target) { ByteArrayOutputStream array = new ByteArrayOutputStream(); DataOutputStream output = new DataOutputStream(array); try { output.writeUTF("Connect"); output.writeUTF(target); } catch (IOException ignored) { } player.sendPluginMessage(this.plugin, PLUGIN_CHANNEL, array.toByteArray()); } } 3. W głównej klasie Twojego pluginu możesz sobie zrobić instancję tej klasy. W tym celu na górze zrób sobie zmienną ją przetrzymującą. private BungeeConnector connector; 4. W onEnable() definiuj zmienną do jej prawidłowej wartości. @Override public void onEnable() { this.connector = new BungeeConnector(this); this.getServer().getMessenger().registerOutgoingPluginChannel(this, BungeeConector.PLUGIN_CHANNEL); // to już było wcześniej } 5. Teraz wystarczy już tylko zrobić sobie do niej getter. public BungeeConnector getConnector() { return this.connector; } I gotowe! Oczywiście można by to jeszcze ulepszyć, na przykład w connect(...) dodać anulowalny event. Dzięki temu można by go anulować w pewnych przypadkach. Na przykład gdy na serwerze jest anti-logout, a Ty nie chcesz żeby w czasie PvP mógł się przenosić między serwerami. Aby połączyć gracza z serwerem wystarczy użyć this.getConnector().connect(player, "survival"); Dzięki temu gracz połączy się z serwerem Survival. Zgodnie z zaleceniami konfiguracyjnymi serwery powinny zostać nazwane całkowicie małymi literami. Podana tutaj nazwa serwera odpowiada tej podanej w pliku config.yml BungeeCorda. Pozdrawiam Czerwono -
Jaki cel mają takie skrypty utrudniające zarządzanie serwerem? Pozdrawiam czerwono
- 20 odpowiedzi
-
- antycheat
- bezpieczeństwo
-
(i 3 więcej)
Oznaczone tagami:
-
Czyli mam wejść na Twój serwer Towarzyszu, żebym mógł się z tobą skontaktować? Ten temat i system prywatnych wiadomości na forum nie wystarcza? To trochę podchodzi pod reklamę. Robotnicze Pozdrowienia Edit: Na serwer nie da się wejść...
-
Nazwa serwerowej Valuty i skrzynki z niespodziankami!
TheMolkaPL odpowiedział(a) na Meloniasty temat w Zrealizowane
Myślę, że najpierw potrzebujemy wiedzieć co w ogóle znaczy nazwa McPlay Towarzyszu jak i skąd się wzięła. Wtedy można coś wymyślić. Robotnicze Pozdrowienia -
Proletariuszu, dlaczego sprawdzasz dwa razy getType()? Poza tym sprawdzasz czy jego sub-ID to 0, a więc jest zwykłym złotym jabłkiem, więc nie jest ulepszonym. Czerwone Pozdrowienia Towarzyszu
