Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Problem z Timerem (Bukkit scheduler)


Querko

Rekomendowane odpowiedzi

Opublikowano

to tak po

1. po co to?     @SuppressWarnings("deprecation")

2. nie laduj danych z plikow caly czas tylko zaladuj raz do obiektu jakiegoś.

3.  czego nie zrozumiales w słowach "zrób jeden task dla wszystkich"

                    Bukkit.getScheduler().scheduleSyncRepeatingTask(Main.getInst(), new Runnable(){

                        public void run(){
                            for(Entry<String, Long> entry : timer.entrySet()){

                                long ms = (System.currentTimeMillis() - entry.getValue()) / 1000;
                                        
                               Player player = Bukkit.getPlayer(entry.getKey());

                               player.sendMessage("Twoj czas to: " + ms);
                            }
                            
                        }
                    }, 0L, 20L);

robisz task który leci po wszystkich graczy tyle razy ile gracyz wejdzie na arene jaki to ma sens? pisałem ci w onEnable() to zrób 

z tego co widzie twoje umiejetności nie tylko co programowania ale logicznego myślenia są niskie, zabierz sie za podstawy bo to naprawde nie ma sensu ten plugin z takim kodem ci 10 graczy nie uciagnie. 

Opublikowano

Nawet nie wiem co się w tym kodzie dzieje xD..

 

Zrób coś takiego i powinno działać


public class claz implements Runnable  {

    private static Map<Player, Integer> mapk = new WeakHashMap<>();

    @Override
    public void run() {
        for (final Map.Entry<Player, Integer> entry : mapk.entrySet()) {
            final Player key = entry.getKey();
            final Integer value = entry.getValue();
            mapk.put(key, value + 1);
        }
    }
}

a potem w main 

Bukkit.getScheduler().runTaskTimerAsynchronously(this, new claz(), 10L, 10L);

 

Musisz sobie do tej mapki dodawać typów potem usuwać itd, itp. Jak tego nie ogarniesz to bierz sie za podstawy javy ;v

(Wiem, że można to zrobić lepiej ;>)

Opublikowano

Holy shit.

Ale wy kombinujecie.. XDDDD
Chcesz by liczyło czas, to robisz sobie do mapki czas startu, przy końcu wyciągasz i obliczasz.
Jak chcesz, by wysyłało informacje co X sekund, to odpalasz async taska w tle, który leci sobie po key'ach mapki i wysyłasz graczu wiadomość bazując na obecny czas - początkowy.

A tu jakieś taski dla każego gracza, Hammer też zabłysnął, jak wy tak robicie pluginy, to się nie dziwie, że potem jest ,,no bukkit max 500 typa na 10TPS utrzyma, bo silnik się dławi" XDDD

784091427630431250239.png

Regulamin sygnatur

Opublikowano
Dnia 23.06.2017 o 22:03, ToNapewnoNieJaAMożeJednakJa napisał:

ok to tak

1. WeakHashMap<Uuid,Long> nazwa = new WeakHashMap<>();

2. robisz ASYNC taska, async by nie obciażać głównego wątku a że tam tylko bęziesz sendMsg robił to nie będzie problemu z synchronizacją

3. w tasku robisz

for(Map.Entry<Uuid,Long> entry : nazwa.entrySet()){
     i teraz

    long ms = System.currentTimeMilis() - entry.getValue();

   Player player = Bukkit.getPlayer(entry.getKey());

   player.sendMessage("Twoj czas to: " + ms);
}

mniej więcej dodawanie to poprostu

nazwa.put(uuid_gracza,System.current....);

mniej więcej coś takiego powinno ci zadziałać, jak nie zadziała to napisz bład to pomoge

 

47 minut temu, Oldis napisał:

Holy shit.

Ale wy kombinujecie.. XDDDD
Chcesz by liczyło czas, to robisz sobie do mapki czas startu, przy końcu wyciągasz i obliczasz.
Jak chcesz, by wysyłało informacje co X sekund, to odpalasz async taska w tle, który leci sobie po key'ach mapki i wysyłasz graczu wiadomość bazując na obecny czas - początkowy.

A tu jakieś taski dla każego gracza, Hammer też zabłysnął, jak wy tak robicie pluginy, to się nie dziwie, że potem jest ,,no bukkit max 500 typa na 10TPS utrzyma, bo silnik się dławi" XDDD

 

nie żeby coś ale dokładnie to co tutaj napisałeś napisałem na samym początku więc niczym nie zabłysłeś, a to że on robi taska per gracz gdzie w tym tasku leci po wszystkich no to ...

a co do hammera to +1

Opublikowano
4 godziny temu, __AHA__ napisał:

Nawet nie wiem co się w tym kodzie dzieje xD..

 

Zrób coś takiego i powinno działać



public class claz implements Runnable  {

    private static Map<Player, Integer> mapk = new WeakHashMap<>();

    @Override
    public void run() {
        for (final Map.Entry<Player, Integer> entry : mapk.entrySet()) {
            final Player key = entry.getKey();
            final Integer value = entry.getValue();
            mapk.put(key, value + 1);
        }
    }
}

a potem w main 


Bukkit.getScheduler().runTaskTimerAsynchronously(this, new claz(), 10L, 10L);

 

Musisz sobie do tej mapki dodawać typów potem usuwać itd, itp. Jak tego nie ogarniesz to bierz sie za podstawy javy ;v

(Wiem, że można to zrobić lepiej ;>)

Nie działa sypie nullami i wgl nawet się nie odpala 

 

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...