-
Ilość zawartości
192 -
Rejestracja
-
Ostatnia wizyta
-
Wygrane w rankingu
2
Treść opublikowana przez paweU
-
Ten temat został zamknięty.
-
Jak zablokować stawianie w danym regionie bloku
paweU odpowiedział(a) na DeepesT pytanie w Pytania i problemy
Tak -
Jak zablokować stawianie w danym regionie bloku
paweU odpowiedział(a) na DeepesT pytanie w Pytania i problemy
Musisz dodać do libek WorldEdita i WorldGuarda -
Jak zablokować stawianie w danym regionie bloku
paweU odpowiedział(a) na DeepesT pytanie w Pytania i problemy
Sprawdzanie czy dana lokalizacja znajduje się w danym regionie: public static boolean inRegion(Location location, String RegionName) { boolean cuboid = false; ApplicableRegionSet regions = WorldGuardPlugin.inst().getRegionManager(location.getWorld()) .getApplicableRegions(location); for (ProtectedRegion region : regions) { if (region.getId().equalsIgnoreCase(RegionName)) { cuboid = true; } } return cuboid; } BlockPlaceListener (nie testowałem, ale powinno śmigać): @EventHandler public void onPlace(BlockPlaceEvent event) { Player player = event.getPlayer(); Block block = event.getBlockPlaced(); Material type = block.getType(); if(type != Material.ENDER_STONE){ return; } ItemStack itemStack = player.getItemInHand(); if(!itemStack.hasItemMeta()){ return; } ItemMeta itemMeta = itemStack.getItemMeta(); if(!itemMeta.hasDisplayName()){ return; } String name = itemMeta.getDisplayName(); Location location = block.getLocation(); if(!LocationUtil.inRegion(location, "nazwaregionu")){ return; } if(name.equals(ChatUtil.fixColor("&2Test"))){ event.setCancelled(true); player.sendMessage("Nie mozesz tego postawic na tym regionie!"); } } ChatUtil: public static String fixColor(String text){ return ChatColor.translateAlternateColorCodes('&', text); } -
Problem został rozwiązany.
-
Problem został rozwiązany.
-
Cześć. Moje pierwsze pytanie brzmi: dlaczego zrobiłeś "public boolean onMuteTempMute"? Zamień "boolean" na "void", a "return false" na "return" Dodatkowo staraj się proszę nie robić wszędzie "} else if {" oraz "else {". Tam gdzie można to radź sobie po prostu returnami. Co do Twojego problemu to ciężko mi tutaj wychwycić błąd, ale jeżeli masz czas to napisz do mnie proszę na discordzie, pobierz program AnyDesk i tam Ci pomogę jak będę mieć pełen wgląd w projekt. Discord: PAWEU#1513 Pozdrawiam
-
Radzę abyś dobrze sprawdzał kod pluginów, które publikujesz oraz ogólnie wszystkie klasy po kolei sobie przescrollował od góry do dołu i od dołu do góry. Jeśli uznasz plugin za gotowy, a będziesz miał w niektórych klasach jakieś nieużywane funkcje lub po prostu puste to po prostu je usuń. Niestety, ale teraz to wygląda w ten sposób, że nawet jeżeli zostawiasz jakieś puste funkcje lub nieużywane to jest duże prawdopodobieństwo, że zostaniesz przez kogoś oskarżony o "nieudolne kopiowanie kodu" itp. Rób to po prostu dla siebie, żeby nikt Cię nie obgadywał na discordach i nie mówił rzeczy w stylu "ThisKarolGajda to jakiś pseudziak, kopiuje kod nieudolnie, zostawia puste funkcje jakieś.. przecież to od razu widać, że coś tam namieszał". Dodatkowo zmniejszysz wagę pluginu. Jeśli szykujesz już jakiś kolejny projekt i planujesz go opublikować to odezwij się do mnie proszę na discordzie i tam może będę potrafił coś doradzić i wyłapie jakieś niedociągnięcia, żeby potem nie było właśnie takich sytuacji jak tutaj. Discord: PAWEU#1513 Pozdrawiam
-
Od razu zaznaczę, że to nie jest ofensywna wypowiedź, a po prostu moja opinia. (zaznaczam to, ponieważ jak na discordach próbuje podpowiadać ludziom to mnie wyzywają i mówią "tak, to pokaż coś swojego kozaku. Wiem lepiej niż ty" itp. XD 1. Staraj się robić zmienne zamiast co chwila robić np. event.getPlayer() (mówię tutaj np. o klasie ChatDelay) 2. Nie podoba mi się również nazewnictwo klas np. w package "listeners". Warto żeby listenery były nazywane w stylu "PlayerInteractListener", "InventoryClickListener" itp. itd. 3. Zastanawia mnie też jak to się stało, że w package "listeners" jest klasa w której implementujesz Listener oraz CommandExecutor, podziel to sobie ładnie na klasy i rób to w odpowiednich package'ach. 4. W package "commands" też dziwnie nazywasz klasy. Raz nazywasz klasę "Broadcast" a raz "MeCommand". Warto, żeby wszystkie wyglądały podobnie a najlepiej właśnie w stylu "BroadcastCommand", "HelpopCommand" itp. itd. 5. Dobrze by było jakbyś zrobił sobie package "config" lub "configs" i tam wrzucił klasę "MessagesFile" a potem nazwal ją np. "MessagesConfig" To tak na pierwszy rzut oka, nie skupiałem bardzo uwagi na jakość kodu, ale jest czytelnie. Pozdrawiam, w razie odezwij się do mnie na discordzie: PAWEU#1513
-
public static boolean inRegion(Location location, String RegionName) { boolean cuboid = false; ApplicableRegionSet regions = WorldGuardPlugin.inst().getRegionManager(location.getWorld()) .getApplicableRegions(location); for (ProtectedRegion region : regions) { if (region.getId().equalsIgnoreCase(RegionName)) { cuboid = true; } } return cuboid; }
-
Cześć, jeżeli potrzebujesz programisty, który wykona dla Ciebie wszystkie niezbędne pluginy to dodaj mnie proszę na discordzie: PAWEU#1513 Pozdrawiam.
-
Twoja własna strona www [ AKTUALIZACJA ]
paweU odpowiedział(a) na CubeStorm temat w Archiwum współpracy
Ładne stronki, może kiedyś skorzystam- 9 odpowiedzi
-
Sprawa jest prosta. Probujesz wykonac w pluginie funkcje w ktorej odnosisz sie do klasy z pluginu SuperHeroWars ale niestety plugin nie moze znalezc tej klasy co oznacza, ze po prostu ten sam plik który dodałeś do libek (plugin SuperHeroWars) musisz wrzucic do folderu "plugins", bo aktualnie go tam nie ma lub jest, ale inna wersja niz ta z libek.
-
Cześć. Po długiej przerwie wracam i jestem gotowy do przyjmowania nowych zamówień. Zmienił się mój discord. Proszę o dodawanie mnie teraz poprzez PAWEU#1513 Pozdrawiam.
-
Po prostu jak będziesz np. robił tzw. "start edycji" i bedzie Ci szybko wchodziło sporo graczy to w momencie gdy jest spory ruch, wykonywanie podczas dołączenia na serwer czegoś takiego a dodatkowo przy wychodzeniu jeszcze tego co Ty tam zrobiłeś spowoduje niezłą jazde po podzespołach. Po prostu będą lagi. Dodatkowo zalecałbym zastosowanie bazy danych np. MySQL. Wtedy co np. 5 minut w tasku robisz zapis bazy danych + w onDisable również robisz zapis a w onEnable robisz wczytywanie wszystkiego z bazy danych.
-
Ja bym tak tego nie robił
-
Polecałbym ładować wszystko z pliku podczas uruchamiania pluginu i pakować do HashMap'y a potem operować na obiekcie User
-
Spieszę z wytłumaczeniem. Na początku polecam stworzyć sobie obiekt "User". W tym celu stwórz proszę klasę o nazwie "User". Najlepiej umieść ją w package o nazwie "object". Następnie wklej proszę do tej klasy ten kod: ConcurrentSet jest miejscem gdzie będziesz przechowywał wszystkie rzucone przez gracza fireballe. Dlaczego nie zwykły Set? Ponieważ w tasku (do którego zaraz przejdę) byłaby linijka przez którą wyrzucałoby Ci błędy w konsoli "ConcurrentModificationException". Dodatkowo stwórz sobie package o nazwie "manager" i stwórz klasę o nazwie "UserManager" a następnie wklej tam nastepujący kod: HashMap'a jest miejscem w którym będziesz przechowywał dane wszystkich graczy na serwerze. Dane z obiektu User Teraz stwórz sobie package o nazwie "task" i stwórz w nim klasę o nazwie np. "FireballTask". Następnie wklej do niej nastepujący kod: Co to jest task i co w tym przypadku wykonuję? Task co dokładnie pół sekundy sprawdza u każdego gracza po kolei wszystkie fireballe jakie rzucił a następnie weryfikuje czy na świecie jest jeszcze fireball który został rzucony przez gracza. Jesli nie ma to znaczy, że zniknął ze świata co jednocześnie oznacza, że po prostu wybuchł. W momencie gdy fireballa nie ma na świecie, usuwamy fireballa z obiektu User żeby niepotrzebnie nie zapychał nam RAM'u, a następnie wysylamy do gracza powiadomienie o eksplozji. Skoro już jesteśmy przy tasku to troszkę objaśnię. Task jest asynchroniczny co oznacza, że nie będzie obsługiwany przez jeden wątek procesora, a przez oddzielny dzięki czemu nie będzie to w skrócie zamulało serwera. Dlatego też w obiekcie "User" zrobiliśmy sobie "ConcurrentSet", ponieważ w tasku asynchronicznym sypałoby nam błędami ConcurrentModificationException gdyby był to zwykły Set, a że zależy nam na wydajności to warto aby ten task był asynchroniczny. W listenerze od interakcji gracza dodaj sobie tą linijke tam po linijce z ustawianiem velocity. user.getFireballs().add(f); Następnie przejdź do głównej klasy i dodaj w onEnable to: new FireballTask().start(); Ta linijka odpowiada za rejestracje taska Jeśli w klasie z taskiem masz błędy z "Main.getInst()" to na początek klasy głównej (w moim przypadku Main" dodaj: private static Main inst; public static Main getInst(){ return inst; } public void onLoad(){ inst = this; } Jeśli Twoja klasa główna ma inną nazwę to zamień wszędzie "Main" na nazwę swojej klasy. Jeśli wszystko zrobiłeś to skompiluj i zrestartuj serwer W razie jakichkolwiek pytań odezwij się w wiadomości prywatnej Pozdrawiam
-
Zalecałbym nie robienie czegoś takiego w onJoin oraz onQuit. Dodatkowo, jeśli chcesz żeby nazwa pliku wygląda w sposob "nickgacza.txt" to zamiast "p" umieść "p.getName()".
-
Napisałeś cały plugin w jednej klasie, package nazwales "filipek", nasłuchujesz w PlayerJoinEvent czy ktoś ma prawdopodobnie Twój nick, a jeśli tak to wyświetla specjalną wiadomość, że właściciel wszedł na serwer pomimo, że dajesz plugin do pobrania każdemu a nie u każdego jesteś właścicielem. Bardzo dużo wiadomości jest nieedytowalnych z poziomu pliku konfiguracyjnego. Najpierw naucz się proszę poprawnych praktyk, a potem udostepniaj plugin do pobrania. Miłego dnia
-
Premium [ getConnection() oraz setOnlineMode() ]
paweU odpowiedział(a) na pawlo pytanie w Pytania i problemy
na spigocie klapa, a czemu nie chcesz uzyć bungeecorda? -
Zawiesiłem działalność ze względu na sprawy prywatne, ale jestem już dostępny.
-
Wydaję mi się, że po prostu w projekcie w zlym miejscu umiesciles plik plugin.yml, daj nam zrzut ekranu projektu z kompilatora i powiemy gdzie powinien znajdować się ten plik
