Scheduler Java pomoct

Skulky

Člen
Zpráv
17
Bodů
47
Zdravím všechny výborné Java Developery!

Momentálně se učím Javu a potřebuji trochu pomoct...
Vytvářím svůj Lobby systém a v něm bych chtěl naprogramovat aby se každý 3 sekundy aktulizoval scoreboar:)
Samozřejmě jsem se ptal strýčka googla, ale ten mi poradil jen samé neaktualní a nefunkční věci. (Scheduler jsem se vůbec neučil)
Takže.. Byla by tu nějaká hodná duše která by mi zde ukázala celý ten zdrojový code a v něm popsala jaká věc dělá co? :D Takhle se nejlépe učím..

S pozdravem Skulky
 

Yoshino

Stará garda
Zpráv
164
Bodů
434
Tomu, co tu ty chces od programatorov sa v ich komunite hovori "spoon-feeding" a nikto to tam nema velmi rad. Takze pochybujem, ze ti tu bude niekto kvalifikovanejsi (zatial som tu vela takych ludi ani nevidel) rozoberat jeho kod a vysvetlovat kazdy jeden riadok.
 

cancerex

don't waste my fcking time
Zpráv
118
Bodů
289
Místo
Bratislava
To asi ne, kazdopadne checkni ScheduledExecutorService. Timer a TimerTask su uz deprecated.
 

Skulky

Člen
Zpráv
17
Bodů
47
Opět jsem zde a mám problém... Po naprogramování scoreboardu se mi vůbec neobjeví :( V Mainu jsem Listener zaregistroval a v Logu mi to nepíše ani jeden error :( Zde posílám svůj code se kterým jsem pracoval.. + můžete pokud se v tom vyznáte mi říct pokud by to mělo fungovat? Díky

Kód:
public class ScoreBoard implements Listener  {
    
    private Main plugin;
    int sched;
    
    
    public ScoreBoard(Main plugin) {
        this.plugin = plugin;
    }
    
    
    @EventHandler
    public void onJoin(PlayerJoinEvent e) {
        final Player p = e.getPlayer();
        this.updateScoreboard(p);
        if (!Bukkit.getScheduler().isCurrentlyRunning(sched)) {
        sched = Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() {
            @Override
            public void run() {
                updateScoreboard(p);           
            }
        }, 20, 20); 
    }
}   

    
public void updateScoreboard(Player p) {
        Scoreboard board = Bukkit.getScoreboardManager().getNewScoreboard();
        Objective obj = board.registerNewObjective("aaa", "bbb");
        int online = Servers.getPlayersInBungee();
        
        obj.setDisplayName("§cServer");
        obj.setDisplaySlot(DisplaySlot.SIDEBAR);
        obj.getScore("§9").setScore(8);
        obj.getScore("§fOnline:  " + online).setScore(7);
        obj.getScore("§9").setScore(6);
        obj.getScore("§9").setScore(5);
        obj.getScore("§9").setScore(4);
        obj.getScore("§9").setScore(3);
        obj.getScore("§9").setScore(2);
        obj.getScore("§9").setScore(1);
            
        p.setScoreboard(board);
            
    }
        
}
 

Yoshino

Stará garda
Zpráv
164
Bodů
434
Neviem, preco sa ti nezobrazi ten scoreboard, kedze uz dlhu dobu sa BukkitAPI nevenujem, ale co sa tyka toho samotneho kodu, tak takto si vytvoris flicker (bude ti blikat cely scoreboard a to nie je pekna vec).

Moj navrh je pomerne jednoduchy, ale netusim ako daleko si s Javou a BukkitAPI. Scoreboard by som vytvaral len raz, cize v onEnable metode, je zbytocne ho vytvarat pri kazdom pripojeni hraca. Na update jednotlivych riadkov by som pouzil Scoreboard Team a tie len nasledne updatoval, tym by zmizol ten strasny flicker. Cele by som to zabalil do nejakeho managera, ktoremu by som vytvoril tiez instanciu len raz (onEnable) + by v tom bolo zabalene aj to vytvaranie scoreboardu, o ktorom som pisal vyssie. No a potom by som si len z Main classy vratil objekt toho managera a v PlayerJoinEvente nastavil hracovi ten scoreboard.

To znamena, ze na nieco taketo potrebujes aspon trosicku ovladat zaklady Javy a velky problem by to byt nemal. Je to celkom stare riesenie, ale fungovat by to malo tak, ako ty chces a hlavne je to asi jedno z tych jednoduchsich.
 
Poslední změna:
Top