Jump to content
  • 0

Invouk

Dotaz

Ahojte,

Rozmýšľal som nad jedným problémom a ako ho vyriešiť, ide o to, že BossBar ( ProgressBar ) sa mi v hre zobrazí ale hneď zmizne, správne fungovanie by malo správne odpočítavať raz za sekundu až do 0.0 a potom BossBar schovať. 

Zdrojový kód:
 

	public void CreateBossBar(Player player, String text, BarColor color, BarStyle style, float MaxBarProg)
	{
		BossBar bossBar = Bukkit.createBossBar(text, color, style);
		bossBar.addPlayer(player);
		if(!bossBar.isVisible())
		{
			bossBar.setVisible(true);	
			print("BossBar is hidden, Show it !");
		}else bossBar.setVisible(false);
			//bossBar.setVisible(true);
		
		BukkitScheduler scheduler = Bukkit.getServer().getScheduler();
        scheduler.scheduleSyncDelayedTask(this, new Runnable() 
        {
    		float aktualny =  MaxBarProg;
			@Override
			public void run() {
				if(!(aktualny > 1.0) && !(aktualny < 0.0))
				{
					print("Aktualny is less then 1.0 and more than 0.0 !");
					aktualny--;
				
					bossBar.setProgress(aktualny);
					if(aktualny == 0.0)
					{
						print("Its 0 for progressbar, kill him !");
						bossBar.setVisible(false);
					}
				}else print("§cBossBar( ProgressBar ) Is more than 1.0 or less then 0.0 !");
			}
    	},20L);
	}

Skúšal som si hodnoty aj vyprintovať, ale samozrejme píše, že ten progressbar dosiahol hodnotu 0.0 myslím, že problém je s timerom ktorý sa obnovuje rýchlejšie ako 20 tickov
20 tickov = 1 sekunda 

EDIT://
Každopádne som došiel nato, že z publicu kde číta hodnoty MaxBarProg ( float MaxBarProg )  a ako dávam float aktualny =  MaxBarProg; tak mi to do aktualny nedá stav 1.0 ale 0.0.

Ďakujem za všetký rady.
 

Edited by XpresS
Link to comment
Share on other sites

10 odpovědí na tuto otázku

Recommended Posts

  • 0

setProgress
void setProgress(double progress)
Sets the progress of the bar. Values should be between 0.0 (empty) and 1.0 (full)
Parameters:
progress - the progress of the bar

uprav si odcitani od promenne aktualny. Takhle se kod vykonava jednou.

Link to comment
Share on other sites

  • 0

Nebude problém v 

float aktualny =  MaxBarProg;

??

 

Ako, MC pluginom sa nerozumiem, ale z programovacieho hladiska mi príde, že AKTUALNY nastavíš na MaxBarProg... ale odkial si nabral MaxBarProg? Netreba určiť objekt ktorý má parameter MaxBarProg?

Link to comment
Share on other sites

  • 0
setProgress
void setProgress(double progress)
Sets the progress of the bar. Values should be between 0.0 (empty) and 1.0 (full)
Parameters:
progress - the progress of the bar
uprav si odcitani od promenne aktualny. Takhle se kod vykonava jednou.

 

ako myslíš upraviť odčítanie, neviem rozmýšlal som mal som tam double a float a ani jedno nešlo

 

Neni to náhodou tým že:

aktualny--; 

 sa vlastne odčíta celý int ale nie po častiach ako 0.1 ?

 

 

 

Nebude problém v 

float aktualny =  MaxBarProg;

??

 

Ako, MC pluginom sa nerozumiem, ale z programovacieho hladiska mi príde, že AKTUALNY nastavíš na MaxBarProg... ale odkial si nabral MaxBarProg? Netreba určiť objekt ktorý má parameter MaxBarProg?

MaxBarProg definujem hore:

ale pretože nejde odčitávať, tak nato mám tú premennú aby sa do premmenej uložil float a následne X krát odčítal pokial nedosiahne nulu

public void CreateBossBar(Player player, String text, BarColor color, BarStyle style, float MaxBarProg)
Edited by XpresS
Link to comment
Share on other sites

  • 0

MaxBarProg je vždy v rozmezí 0-1, 1 znamená, že je progressbar plný. Vždy ale od té proměnné odečteš 1, takže se nastaví na 0 - prázdný a skryje se.

Můžeš udělat něco jako

bossBar.setProgress(aktualny / MaxProgressBar);

Pak si budeš moct nastavit i hodnoty v jiném rozmezí, než 0-1, a odečítat po 1.

 

Pak taky používáš špatné tasky. Potřebuješ task opakovat (takhle se ti zavolá jen jednou).

scheduleSyncRepeatingTask
Edited by Lukasz
  • Líbí se mi to! (+1) 1
Link to comment
Share on other sites

  • 0

Už som nato došiel, že sa odčíta celé číslo a nie za desatinou čiarkou, 

bossBar.setProgress(aktualny / MaxProgressBar);

ale asi nevieš čo chcem spraviť,  aby sa každú sekundu obnovil a odčítal 0.1 od toho hlavného čísla  

aktualny = MaxProgressBar, takže 0/1  ti akurát vyhodí error, alebo 1/1 


 

scheduleSyncRepeatingTask

dík toto som si nejako nevšimol :) 

Link to comment
Share on other sites

  • 0

Caused by: java.lang.IllegalArgumentException: Progress must be between 0.0 and 1.0 (8.0)

Tak neviem ako či to ide s viac ako 1.0 ale očividne ne no :/
práve raz mi to hodilo viac ako 1 a som sa čudoval tebe prečo píšeš dosazoval i cisla vetsi, nez 1.


a ešte jedna otážka ako ukončiť ten scheduler skúšal som aj
 

Bukkit.getScheduler().cancelTask(scheduler);

Hento som poriešil jednoducho:
ako si hovoril len som tomu trochu nechápal:
 

a MaxBarProg sa nastaví už od plnej takže 100
float aktualny = MaxBarProg;
bossBar.setProgress(aktualny/100.0);
Edited by XpresS
Link to comment
Share on other sites

  • 0

To áno ale keď dám:

 

		int scheduler = Bukkit.getServer().getScheduler();
	    scheduler.scheduleSyncRepeatingTask(this, new Runnable() 
		{

tak mu vadí, že tam nemôže byť int ale
 

BukkitScheduler

a ten canceltask nehádze error ale ak  dám ten bukkitscheduler tak zas vadí cancelTasku
BukkitSchecduler.
 

						Bukkit.getScheduler().cancelTask(scheduler);

skúšal som už X metód po spigot fórach som pobehal po 4 stranu googlu, a stále o tom istom.

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...