Skocz do zawartości

Ranking

Popularna zawartość

Treść z najwyższą reputacją w 03/26/18 uwzględniając wszystkie działy

  1. :.. gWielkanoc ..: Plugin dodający jajka wielkanocne z których wypada nagroda. Sam plugin napisałem przez nudę. Całość pluginu jest w stylu skrzynek jak na MC4U czy też CraftCore. Głównie jest to przeznaczone dla serwerów hardcore. :.. Co znajduje się w pluginie ..: Łatwy i prosty do skonfigurowania config; Wszystkie wiadomości można zedytować; Możliwość wyłączenia wymaganego klucza; Drop kluczy/jajek z mobów/bloków. (do konfiguracji w configu); Własne przedmioty, które można wygrać; Do każdego przedmiotu można dodać zaklęcia, zmienić nazwę oraz dodać opis; Możliwość włączenia/wyłączenia otwierania jajek; Możliwość włączenia/wyłączenia danego dropu z poziomu gry; Komenda, dzięki której można dać każdemu na serwerze/danej osobie jajka/klucze; Prosta animacja wygranej w stylu CS:GO; :.. Wiki ..: Wiki nie jest gotowe. Całość będzie skończona za 2-3 dni. https://github.com/goblicpl/gWielkanoc/wiki :.. Download ..: Aktualnie wspieranymi wersjami są: 1.12.2/1.8.8; https://github.com/goblicpl/gWielkanoc/releases :.. Screenshoty ..:
    3 punkty
  2. TheMolkaPL

    Nie dziala TNT

    Nie wprowadzajcie zmian w evencie (ani w klasach, które w evencie mają do nich referencje) na priorytecie MONITOR. MONITOR jest specyficznym priorytetem, który wykonuje się jako ostatni, po wszystkich innych i służy jedynie do odczytu danych. Dzięki temu pluginy, takie które przykładowo zapisują zdarzenia na serwerze (przykładowo śmierci) mają pewne dane o graczu powodach i masie innych rzeczach. Nic nie wybuchnie na mapie, dopóki jednostka wybuchająca (TNT/Creeper) będzie poza terenem gildii, a wszystko to przez linijki 18 - 21. Pozdrawiam Czerwono!
    2 punkty
  3. Przy każdym podserwerze w plikach w spigot.yml ustaw bungeecord: true
    2 punkty
  4. Właśnie odpisałem w temacie SkyWars - Obszar bogaty post na temat jak zrobić regenerację światów. Myślę, że może się to przydać wielu osobom. Omówię tutaj dwa znane rozwiązania regeneracji, oraz podam nowy - najlepszy. Będę podawać referencję do kodu mojego pluginu Arcade2, ponieważ tam właśnie taki system "regeneracji" istnieje. Zapis zmiany stanu bloków - BŁĄD! Przy słowie "regeneracja" rozumiemy przede wszystkim powrót stanu bloków do takiego, jakie były w punkcje pierwotnym. Pierwsze rozwiązanie takiego problemu przychodzi nam rejestracja zmiany stanu wszystkich bloków. Stawiamy dirt? Informujemy, że na koordynatach X, Y oraz Z nowy blok to dirt. Na pierwszy rzut oka może się to wydawać działające, ale to nie prawda. Nigdy nie ma pewności, że wszystkie bloki zostaną zregenerowane, dodatkowo taki zapis brudzi tylko naszą pamięć RAM (jeżeli mam to robić in-memory). Musielibyśmy nasłuchiwać każdą jedną możliwą zmianę bloku w serwerze oraz ją rejestrować. Drugi problem z tego się rodzi - kiedy i jak to zregenerować? Moc obliczeniowa do wykonania tak dużego zadania jak podmiana dużej ilości bloków zużyje nam dużo CPU. Kolokwialnie rzecz ujmując regeneracja można wpłynąć znaczenia na działanie serwera, więc najlepiej byłoby to zrobić podczas gdy jest on wyłączony, lub nie ma na niej żadnych graczy. Tworzenie rzutu stanu bloków - BŁĄD! No dobrze, skoro nie działa rejestracja bloków, to może przy starcie gry zapiszmy stan wszystkich bloków świata, a potem przywróćmy je do tej wartości? Pobieranie oraz zapisanie stanu bloków będzie bardzo podobne do ich podmiany - kosztuje bardzo mocnym zużyciem zasobów serwera, więc należałoby zrobić go poza jego normalnym działaniem. Ostatecznie takie rozwiązanie odpada, ponieważ jest to także w dużej mierze powielenie rozwiązania pierwszego. Ładowanie - wyładowywanie światów - ROZWIĄZANIE! Silnik Bukkit oferuje nam możliwość ładowania i wyładowywania światów w czasie jego trwania działania. Wyładowanie świata następuje natychmiastowo, polega jedynie na usunięciu go z pamięci RAM. Ładowanie natomiast może znaczenia wpłynąć na działanie logiki serwera. Generalnie rzecz biorąc ładowanie i wyładowywanie światów jest najlepszym rozwiązaniem, ponieważ i tak będzie kosztować zużyciem mniejszej ilości zasobów, niż rzeczywista regeneracja. Wprowadzenie No dobrze - zacznijmy. Na początku prosiłbym abyśmy ustanowili w tym poście kilka słów stałych, aby nie było problemów ze zrozumieniem. Świat (world) - tym słowym mam na myśli Minecraftowy świat ładowany do serwera. W plikach świata musi znajdować się plik level.dat; tam zapisane są informacje o generatorze, ziarnie (seed), miejscu spawna, obecny spawnpoint oraz masa innych rzeczy. Mapa - tym słowem mam na myśli zbiór bloków które tworzą jakąś strukturę. Znajdują się one w chunkach, czyli dużych zbiornikach 16x16 bloków (na koordynatach X oraz Z) na pełnej wysokości świata - koordynat Y. Ładowanie świata Świat do serwera ładujemy metodą createWorld(...) z interfejsu Server. W parametrze podajemy nowy obiekt klasy WorldCreator - jest to builder, czyli budowniczy innego obiektu, gdzie jego stworzenie wykonujemy po woli wykonując po kolei jej metody. Załadowanie nowego świata można także wykonać w samym WorldCreatorze. WorldCreator jest świetnym narzędziem do wypełnienia znacznej większości ustawień świata. Zaczynami od ich ustawienia. environment(...) - ustawiamy typ świata - może to być NORMAL, THE_END lub NETHER. Dzięki temu zmienimy dużo w jego działaniu. Na przykład niebo (w netherze jest czerwone, w the endzie jest czarne z gwiazdami), oraz fizykę (w netherze nie można wylewać wody, w the endzie spawnują się tylko ender-dragony i endermany). generateStructures(...) - w parametrze podajemy wartość true/false, gdzie true ustawi nam, że na tym świecie będą się generować struktury - wioski, opuszczone kopalnie, piramidy, studnie, ... - false je wyłączy. generator(...) - ustawiamy generator z jakiego nasz nowy świat będzie korzystać. Proszę spojrzeć na metody poniżej - mamy tutaj wiele możliwości wyboru. Możemy tutaj stworzyć swój własny generator podając nasz ChunkGenerator, lub pobrać domyślny generator pluginu podając jego nazwę w Stringu. Proszę poczytać więcej o generatorach w poście niżej - to bardzo ważne! generatorSettings(...) - ustawiamy dodatkowe ustawienia generatora - nie znam do końca jego działania - nigdy z tego nie korzystałem. name(...) - podajemy nazwę naszego świata - UWAGA: nazwa świata musi znajdować się w przedziale A-Z, a-z, 0-9 oraz _ i - żadne inne znaki nie są wspomagane! seed(...) - podajemy seed - ziarenko z którego będzie korzystać nasz generator. Działa tylko przy korzystaniu z generatora vanilla! type(...) - podajemy typ naszego świata. Podajemy WorldType gdzie możemy podać świat płaski, duże biomy, oraz masę innych typów. Pozwolę sobie jeszcze pokazać jak to działa w pluginie Arcade2: https://github.com/ShootGame/Arcade2/blob/f91c4d0c2b44157ad1816c999823b7828df30161/src/main/java/pl/themolka/arcade/map/MapManager.java#L84-L90 Następnie wykonujemy metodę createWorld(), a rezultat zapisujemy w obiekcie World. W tym momencie nasz świat zostanie załadowany do pamięci serwera. Może to zająć moment, zależnie od wielkości świata. Teraz należy ustawić ostatnie ustawienia gdzie dokładniej ustawimy ten świat pod nasz serwer. setAutoSave(false) - dzięki temu nasz świat nie zapisze się przy jego wyładowaniu, oraz wyłączymy auto-save, który domyślnie wykonuje się co 5 minut (do ustawienia w bukkit.yml). setKeepSpawnInMemory(false) - domyślnie w Minecraft chunki na spawnie oraz wokół niego nie są wyładowywanie z pamięci, oraz zawsze znajdują się w pamięci podręcznej serwera. Jest to zbędny zabieg, ponieważ spawnpoint świata nie koniecznie jest spawnem mapy. setSpawnFlags(potwory, zwierzęta) - może być przydatne na mapie typu SkyWars. Dzięki temu wyłączymy możliwość spawnowania się potworów i/lub zwierząt na całym świecie. Jak to działa w Arcade2: https://github.com/ShootGame/Arcade2/blob/f91c4d0c2b44157ad1816c999823b7828df30161/src/main/java/pl/themolka/arcade/map/MapManager.java#L84-L90 I gotowe! Teraz mamy załadowany świat gotowy do gry! Wyładowywanie świata Wyładowywanie świata jest bardzo proste. Wystarczy użyć metody unloadWorld(świat, zapis). Możemy podać nazwę świata, lub obiekt World. Drugi parametr ustawiamy na false, dzięki czemu nasz świat nie zostanie zapisany. Optymalizacja światów Jak wiemy generowanie świata zużywa drastycznie dużo zasobów serwera. Aby temu zaradzić należy zrobić prosty generator który wygeneruje nam tak zwany "void", czyli pusty świat. Tutaj istnieje taki generator, który generuje nam całkowicie pusty świat -> https://github.com/ShootGame/Arcade2/blob/f91c4d0c2b44157ad1816c999823b7828df30161/src/main/java/pl/themolka/arcade/generator/VoidGenerator.java Należałoby także zoptymalizować pliki świata. Klient, serwer, mody oraz różne programy (np MCEdit) generują nam dodatkowe, zbędne pliki które możemy spokojnie usunąć. level.dat - pozostaw - tutaj zapisane są wszystkie podstawowe informacje na temat świata. region (folder) - pozostaw - tutaj znajdują się pliki, w których zapisane są chunki świata. data (folder) - pozostaw - tutaj zapisane są wszystkie wioski na mapie, oraz mapy (te które wskazują nam jakiś punkt, lub po prostu mamy w niej grafikę). Wszystko inne należy usunąć! Usuwanie zbędnych chunków Przy budowie mapy Minecraft generuje nam wszystkie chunki dookoła nas. Wiele z nich jest zbędnych ponieważ nie znajduje się na nich żaden element naszej mapy. Jest to kolejny krok naszej optymalizacji, która będzie miała wpływ na przyspieszenie ładowania świata. Ten krok należy wykonać przed powyższym "Optymalizacja światów". Przy ładowaniu świata serwer będzie nam czytał chunki które znajdują się na mapie. Odczytanie ich z pliku zajmie znacznie więcej czasu niż pobranie pustej tablicy w naszym generatorze. Zupełnie inaczej jest w generatorze vanilla - tam pobranie zapisanego świata zajmie znacznie mniej czasu, niż wygenerowanie nowego! Pamiętaj o tym! Pobieramy sobie programik MCEdit - http://www.mcedit-unified.net/ Otwieramy go Po otwarciu pokaże nam się menu główne programu Klikamy "Load Level" Wybieramy plik level.dat świata w którym chcemy usunąć zbędne chunki Klikamy "otwórz" Nasz świat zostanie załadowany Klikamy na górze programu "Chunk View"; przełączymy się dzięki temu z widoku gracza na widok z lotu ptaka. Na ekranie pojawi nam się siatka (możemy przybliżyć/oddalić świat scrollując myszką) Zaznaczamy myszką te chunki (kratki) na których znajduje się nasza mapa Po lewej stronie pokazuje nam się okienko - klikamy na nim przycisk "Prune" Wyskoczy nam okienko potwierdzające usunięcie wszystkich chunków które nie zostały zaznaczone. Proszę się upewnić czy na pewno zaznaczyliśmy te chunki na których znajduje się mapa. Następnego punktu nie da się cofnąć! Klikamy OK, chunki zostaną usunięte Gotowe, zamykamy program i przechodzimy do punktu "Optymalizacja światów"! Zakończenie Tak o to mamy całkowcie zoptymalizowany świat oraz system "regeneracji". Dobre praktyki Jest jeszcze jedna rzecz którą chciałbym zaznaczyć. Folder twojego świata w głównym folderze serwera nie zostanie usunięty. Zalecam otworzyć plik bukkit.yml, oraz w sekcji settings, dopisać world-container: '/worlds' - dzięki temu wszystkie nasze światy będą zapisywane w folderze worlds, podobnie jak pluginy w plugins. Jest to dość ukryta funkcja w Bukkicie, ponieważ nie jest domyślnie zapisane w YAMLu. Przykład: settings: world-container: '/worlds' Drugie zagadnienie to 100% pewność, że nasza mapa nie zostanie uszkodzona. zalecam w głównym folderze serwera, obok logs, plugins i worlds zrobić folder maps. Tam będziemy trzymać wszystkie światy na których znajdują się mapy. Podczas ładowania tej mapy będziemy kopiować jej pliki do folderu worlds z poziomu pluginu. Dzięki temu mamy 100% pewność, że naszej mapie (która może być wykorzystywana przez wiele serwerów jednocześnie) na pewno się nic nie stanie! Mam nadzieję, że pomogłem
    1 punkt
  5. Za mało czasu, abym to zrobił. Aktualnie jest to pod święta. Kiedyś może zrobię cały plugin na skrzynki, wliczając skrzynki świąteczne. #edit Dodałem na githubie plugin pod wersję 1.8.8. https://github.com/goblicpl/gWielkanoc/releases
    1 punkt
  6. LloydPL

    KOORDY GRACZA

    TAK http://en.njol.ch/projects/skript/doc/expressions#ExprCoordinate
    1 punkt
  7. Queito

    Zmienna

    Wyjaśnij mi działanie skryptu dokładnie to go napiszę od zera, bo nie jestem wstanie ogarnąć co twój skrypt robi ;p
    1 punkt
  8. Pomysł fajny, konfiguracja przejrzysta, może dodaj losowanie x naraz i zamiast losowania poziomo, pionowo?
    1 punkt
  9. Klasy nazywa się z dużej litery ;/ A tak to w kodzie masa problemów: np jak ktoś w konfiguracji użyje złej nazwy itemu to dostanie dość słaby nic nie mówiąc błąd, do tego wszędzie używasz list i ręcznie w pętli szukasz pasującego elementu - np gracza po nicku - od tego są HashMapy. No i zacznij używać mavena, bo tak to co z tego ze jest github jak nikt nie może tego projektu ot-tak otworzyć bo musi ręcznie dodawać wszelkie biblioteki. A tak to ciekawi mnie to: (i tylko po to tu odpisuje... :D) { public static boolean isInteger(String string) { return Pattern.matches("-?[0-9]+", string.subSequence(0, string.length())); } Skąd to masz, widzę ten idiotyczny kod już nie wiem który raz i zawsze mnie zastanawia skąd to jest... Po co jest te subSequence? A tak to lepiej mieć metodę: public static Integer asInt(String str) { try { return Integer.parseInt(str); } catch (NumberFormatException e) { return null; } } i wtedy jak zwraca null to wiadomo że to na pewno nie integer, a jak nie-null to można już używać. Bo tak to twoja metoda np uzna że 9839853290848753204394754309584854 to integer - a tak nie jest.
    1 punkt
  10. Klasy nazywaj z dużej litery, fieldy typu: private static List<User> users = new ArrayList<User>(); rób jako finalne I co do samych userów: private static List<User> users = new ArrayList<User>(); public static User getUser(String name) { for(User u : getUsers()) { if(u.getName().equals(name)) { return u; } } return null; } Co jest szybsze, pobranie gracza poprzez key uuid: private final Map<UUID,User> users = new HashMap<>(); czy iteracja, i przy kazdym userze sprawdzanie czy jego nick jest rowny okreslonemu stringowi ;/ public class User { private String name; private Player p; private boolean isOpenChest; private Inventory inv; przypisywanie inventory na kazdego usera to slaby pomysl private Inventory inv; private int countdown = 0; public User(Player p) { this.name = p.getName(); this.p = p; this.isOpenChest = false; this.inv = null; } Inventory jest juz null, wiec ponowne przypisywanie troche bez sensu, chyba ze bedzie IDE wyswietlac cos typu 'variable.. might be not initialized' do tego w klasie glownej masz raz spacje, raz taby (lub 2 taby zamiast jednego) try { configExists(); } catch (Exception e) { e.printStackTrace(); } tutaj powinienes cos z tym robic Ode mnie to tyle, reszty nie mam czasu sprawdzić, ale ogólnie to fajny pomysł na plugin
    1 punkt
  11. Fajny plugin. Czekamy na 1.8.8
    1 punkt
  12. Nik3N

    Citizens 1.8.9

    to dzięki mam dzięki tobie 10 dolków w portfelu
    1 punkt
  13. Nik3N

    Citizens 1.8.9

    Jak to janusz pobrałem za free
    1 punkt
  14. No no plugin fajny czekam na 1.8.8
    1 punkt
  15. Myrlakusss

    + rep Dobra morda

    + rep Dobra morda
    1 punkt
  16. Queito

    Zmienna

    Zmienna grupowa {zmienna::*}
    1 punkt
  17. Skav

    Sprawdzanie liczby osób na danej mapie

    loop all players: if loop-players is in "world": add 1 to {_online} Dopisz sobie resztę kodu
    1 punkt
  18. Mine1998

    Citizens 1.8.9

    https://www.spigotmc.org/resources/citizens.13811/ 10 $
    1 punkt
  19. NDmarian

    Poszukuje skryptu - event wielkanocny

    on mine of stone: chance of 1%: give 1 [nazwa itemu] to the player send "Gratulacje. Znalazles [nazwa itemu]" a jak chcesz na te nagrody to polecam plugin: https://dev.bukkit.org/projects/item-cases-cs-go - np. u villagera za te pisanki i koszyki mozna kupić skrzynie z dropem. Myślę że to będzie dobre rozwiązanie
    1 punkt
  20. W tym temacie napiszę Wam krótko, co sądzę o członkach ekipy forum. nie zabijajcie za oznaczenia Na pierwszy ogień pójdzie @Libter. Jest najważniejszą osobą na forum (bo gdyby nie on, to by nas tutaj nie było. Albo byłoby nam gorzej. Możliwe też, że byłoby lepiej ), czasami podejmuje pochopne decyzje, ale na ogół jest ok. Potrafi dobre zarządzać. Teraz przejdziemy do najlepszego moim zdaniem członka administracji - @Ewalda. Ewald to odpowiedzialny, pracowity i ogarnięty człowiek - polecam go jako kolegę, administratora, moderatora i jako człowieka (no i oczywiście jako niedoczekanego moderatora fanpage ). Zabiorę się za @Reedzev_a. Reedzev_ to bardzo dobry programista, ma doświadczenie i nie wątpię w jego umiejętności. Jego wadą jest charakter i nieraz fałszywość. Da się z nim współpracować. Pora na @xVendrome. Vendrom ma duże umiejętności, robi bardzo dobre serwery, z charakteru jest ok. Dobrze się z nim współpracuje. A teraz @bvcz. bvcz to osoba, która była w ekipie jak ja zaczynałem od redaktora bloga. Później miał chwilę przerwy, a teraz znów jest w administracji. Jest porządnym moderatorem, i dobrym administratorem. Czas na... @JanekJaran. Nie znam go za dobrze, dlatego ciężko będzie mi napisać coś o nim. Wiem, że nie jest dobry w zarządzaniu. Nie wiem jaki jest z charakteru. A teraz pora na gwoździa programu - @Jqmey. Ciężko jest nazwać mi go administratorem, czasami nawet człowiekiem. Jego zachowanie w niektórych momentach jest poniżej ludzkiej godności. Bywają momenty, w których nie potrafi współpracować. Jqmey jest osobą zarozumiałą, niepotrafiącą przyznać się do błędu. Troszczy się tylko o swoje 4 litery, nieraz nie ma szacunku do innych. Taka osoba nie powinna znajdować się w ekipie forum, ani w gronie zasłużonych, ale "wygrał przetarg". Jego zaletą mogą być umiejętności(?). Zachęcam do komentowania tematu i pisania swoich opinii o ekipie forum. Możecie także zadawać mi pytania w PW - w przyszłości zrobię Q&A. Kolejny wpis pojawi się w środę.
    1 punkt
  21. Libter

    Jqmey

    Dodam, że wątek przypomina mi pewien inny temat: https://fcraft.pl/temat-janekjaran-1037. @Jqmey powinien kojarzyć
    1 punkt
  22. knugi

    Warpy w GUI - Essentials Compatybile

    Siemka, forumowicze! Przedstawiam wam skrypt, na łatwy dostęp do waszych warpów, zrobione za pomocą Essentials. Opis: [+] Skrypt ten dodaje na serwer komendę /warp z zamiennikami takimi jak: /warps i /warpy. Gdy wpiszemy ową komendę, skrypt zbiera informacje na temat warpów i czy macie do nich dostęp. Jeżeli tak to później analizuje ile ma kolumn wyświetlić, a następnie ustawia wam przedmioty, za pomocą których teleportujecie się na dany warp (Jeżeli macie w configu Essentials podany czas na oczekiwanie teleportacji, on dalej cały czas będzie). Niektórzy ludzie potrafią zrobić tych warpów nawet 100, więc wszystkie warpy w jednym GUI by się nie zmieściły, więc zrobiłem strony. Zdjęcia: Pobieranie: CODE CODE RAW Wymagania: Skript, SkQuery, WildSkript; Jako, że nie wstawiłem w tym skrypcie funkcji, więc ten skrypt będzie działał na serwerach 1.7-1.12. Wyżej podane pluginy na wersje 1.12 znajdziecie w spoilerze pod moim postem. Wystraczy kliknąć w link obok nazwy Pozdrawiam #Knugi
    1 punkt
  23. Tak patrząc to na tym forum nie było jeszcze pluginu na chat, były tylko skrypty xd
    1 punkt
  24. Nik3N

    Citizens 1.8.9

    chociaż 10 dolarów za taki dobry plugin to nawet ok cena gdyby było 30 to przesada a plugin warty swojej ceny , może przez płatności ulepszony zostanie
    0 punktów
  25. JanekJaran

    Skarga xVendrome

    Ten temat został zamknięty.
    0 punktów
Ten Ranking jest ustawiony na Warszawa/GMT+02:00
  • Najwięcej postów w tygodniu

    Quexsu
    Quexsu
    6 postów
    Grabsky
    Grabsky
    1 post
    Nicku
    Nicku
    1 post
    mervi_X
    mervi_X
    1 post
    Fendi
    Fendi
    1 post
    kinimod5021
    kinimod5021
    1 post
  • Najwięcej tematów w tygodniu

    Quexsu
    Quexsu
    1 temat
    mervi_X
    mervi_X
    1 temat
  • Aktywni użytkownicy

    Nikt jeszcze nie otrzymał reputacji w tym tygodniu.

×
×
  • Dodaj nową pozycję...