-
Ilość zawartości
718 -
Rejestracja
-
Ostatnia wizyta
-
Wygrane w rankingu
15
Treść opublikowana przez LeviBoyPL
-
No to lecisz z debugami, przed każdym i za każdym ifem stawiasz sobie souta i sprawdzasz, na którym ifie kod się zatrzymuje
-
private Map<Player, Long> cooldowns = new HashMap<>(); Stwórz sobie mapkę zawierającą plajera i long if(cooldowns.containsKey(player)) Sprawdź czy ktoś jest w mapce cooldowns.put(player, System.currentMillis() + 5*60*1000L); Jeżeli nie ma go to dodaj go do mapki if(cooldowns.get(player) < System.currentMillis()) Jeżeli jest to sprawdź czy czas zapisany w mapce jest mniejszy niż aktualny czas, jeżeli jest to pozwól mu rzucić perełką, jeżeli nie ma to nie pozwalaj Do cooldownów polecam zrobić Ci osobny storage, bo musisz pamiętać, żeby usuwać ludzi z mapki, którzy wyszli z serwera. Btw czemu mam wrażenie, że inspirowałeś się kokscraftem? xd
-
Listener zarejestrowany w mainie?
-
Jak wygląda kod?
-
następna uwaga, istnieje metoda do wyciągnięcia bezpośrednio booleana getBoolean
-
ItemStack goldIngot = new ItemStack(Material.GOLD_INGOT); ItemMeta itemMeta = goldIngot.getItemMeta(); itemMeta.setDisplayName("nazwa"); goldIngot.setItemMeta(itemMeta); Zrób sobie do tego metode wzorem tego co Ci wysłałem
-
Bez konkretnego biznesplanu, rozeznania na rynku cenowym, rozeznania na rynku technologicznym, żadnej próby realizacji z Waszej strony raczej ciężko będzie Wam zacząć, problemy będziecie mieli od samego początku. 5kzł to też jest ułamek ceny, której potrzebujecie, więc musisz się liczyć z ogromnymi kosztami, które w ciągu miesiąca będą kilkukrotnie przekraczały cel zbiórki. Jeśli myślisz nad tym na poważnie to poszukaj w Internecie przykładowego biznesplanu, tam będziesz miał też zawartą analizę rynku, analizę SWOT (chyba, podstawy przedsiębiorczości miałem już dawno temu) i plany finansowe. Jest to niezbędne minimum, żeby ktokolwiek zaczął brać Cię na poważnie, więc jak już przygotujesz już sobie takie dokumenty to mógłbyś pisać w sprawie dotacji do firm, które się tym zajmują.
-
A gdzie listener?
-
for (String key : yml.getKeys(true)) { int value = yml.getInt(key); System.out.println(key + ": " + value); } Nie polecam odczytywać/zapisywać danych bezpośrednio do pliku. Powinieneś jedynie przy starcie ładować dane do ramu, a później co jakiś czas je zapisywać.
-
Można jak najbardziej, on any move jest jednym z rozwiązań, ale możesz użyć też every x ticks. Jak to ma działać? Zapisujesz aktualną lokację w jakiejś liście jeżeli jeszcze jej w niej nie ma, a jeżeli jest to porównujesz pitch aktualnej lokacji z pitchem zapisanej lokacji. Jeżeli aktualny pitch będzie mniejszy o x względem poprzedniej lokacji wtedy oznacza to że gracz prawdopodobnie skierował głowę w dół
-
Automatyczna zmiana serwera w waterfall
LeviBoyPL odpowiedział(a) na SteveMinecraft pytanie w Pytania i problemy
https://papermc.io/forums/t/restart-reconnect-bungeecord-reconnect-1-16-5/5063 -
PlayerLoginEvent zwraca obiekt playera, ale jako że samo ładowanie gracza na serwer nie skończyło się to nie ma on wszystkich pól. Rozwiązania są co najmniej dwa. Możesz skorzystać z innego eventy - PlayerJoinEvent, wtedy gracz wszedł na serwer i pomyślnie przeszedł autoryzację. Druga opcja to zamiast pobierać IP z playera możesz pobrać adres z eventu.
-
Event onCommand nie triggeruje się
LeviBoyPL odpowiedział(a) na _xXCichyMleczXx_ pytanie w Pytania i problemy
@EventHandler i implementujesz Listenera -
Nazwy klas definiujemy zawsze z dużej litery
-
File myObj = new File(nickGracza + ".txt"); if (myObj.createNewFile()) { System.out.println("File created: " + myObj.getName()); } else { System.out.println("File already exists."); } Jako że działasz na plikach to powyższe metody mogą spowodować IOException, dlatego musisz użyć try catch'a. Więcej możesz przeczytać na https://www.w3schools.com/java/java_files_create.asp
-
Szczerze po przeczytaniu tego kodu jestem w stanie wysłać Ci jedynie poradnik do absolutnych podstaw javy, nawet nie wiem dlaczego te przyczyny są Ci "niewiadome" https://www.codecademy.com/learn/learn-java
-
Pokaż kod w obu klasach
-
Nie ma takiego, ale możesz sprawdzić czy target jest nullem i jeśli jest to anulować task
-
@EventHandler public void onEntityTargetEvent(EntityTargetEvent event) { if(!(event.getEntity() instanceof Zombie)) return; Zombie zombie = (Zombie) event.getEntity(); new TargetEventZombieRunnable(zombie).runTaskTimer(main, 1, 15); } Lepiej było by zrobić sobie nową klasę z kodem taska, wtedy kod będzie wyglądał schludniej i wygodniej będzie dodawać kolejne rzeczy do listenera, wyżej tworzysz sobie nową klasę, która rozszerza BukkitRunnable i od razu uruchamiasz task. public class TargetEventZombieRunnable extends BukkitRunnable { private final Zombie zombie; public TargetEventZombieRunnable(Zombie zombie) { this.zombie = zombie; } @Override public void run() { if(zombie.isDead()) cancel(); List<Entity> nearbyEntities = zombie.getNearbyEntities(10, 10, 10); if(nearbyEntities.size() == 0) cancel(); for(Entity loopEntity : nearbyEntities) { if(loopEntity instanceof Player) { Player player = ((Player) loopEntity).getPlayer(); Vector vector = zombie.getLocation().getDirection(); Snowball snowball = zombie.launchProjectile(Snowball.class); zombie.setTarget(player); snowball.setVelocity(vector); } } } } Musisz tylko pamiętać że zombie często traci zainteresowanie graczem i idzie w innym kierunku, jeżeli nagle znów zacznie śledzić gracza powstanie nowy task i będzie działał podwójnie. Aktualny cel zombie możesz sprawdzić poprzez Zombie#getTarget()
-
Co tak właściwie chcesz zrobić? Bo z tego kodu ciężko jest się domyślić
-
Po pierwsze - rozdzieliłbym Listenery od klasy main, po drugie po co określasz sobie zmienną typu player, żeby chwilę później znów getować go z eventu, po trzecie nazwę klasy zawsze zaczynamy z dużej litery. Player p = e.getPlayer(); e.getPlayer().getGameMode(); Mogłeś po prostu użyć tej zmiennej p.getGameMode(); Co do problemu - możesz użyć konstruktora w klasie Command (swoją drogą polecam inną nazwę, bo istnieje już intefejs Command i może się mylić) public class TestCommand implements CommandExecutor{ private Main main; public TestCommand(Main main) { this.main = main; } @Override public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { if(sender instanceof Player) { Player p = (Player) sender; p.sendMessage(ChatColor.DARK_GREEN + "Twój wynik to: " +main.getExit()); } return true; } } Wtedy zmienna exit nie musi już być statyczna
-
https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/event/entity/EntityTargetEvent.html
-
Jaki silnik i jaka wersja?
-
@EventHandler public void onDeath(EntityDeathEvent event) { Entity entity = event.getEntity(); Player player = event.getEntity().getKiller(); if(player != null) { if(entity.getCustomName() != null && entity.getCustomName().equals(ChatColor.RED + "Zgnilek")) { player.getInventory().addItem(new ItemStack(Material.DIAMOND, 1)); } } }
-
Stoniarka, edycja pluginu. Proszę o pomoc.
LeviBoyPL odpowiedział(a) na HackerPL pytanie w Pytania i problemy
Sprawdź w kodzie w takim razie, być może autor przewidział taki wypadek i stworzył odpowiednie eventy i przygotował jakieś API, bo nie ma eventu, który wywołuje się podczas postawienia bloku przez plugin. Myślę, że nie ma też w miarę optymalnego sposobu na sprawdzanie tych rzeczy, bo podejrzewam, że musiałbyś loopować kilkaset tysięcy bloków. Dlatego o wiele wygodniej i lepiej byłoby sprawdzenie właśnie w kodzie tego dużego projektu.
