• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

ActionBar

Status
Für weitere Antworten geschlossen.

Melonemax

Redstoneengineer
Registriert
20 Februar 2021
Beiträge
37
Diamanten
250
Ich will eine ActionBar haben aber diese Verschwindet nach ein Paar sekundennach dem Join

Java:
  @EventHandler
    public void Join(PlayerJoinEvent event){
        Player player = event.getPlayer();
       
        player.spigot().sendMessage(ChatMessageType.ACTION_BAR, new TextComponent("Ihr ist ein Text"));
    }
 
Zuletzt bearbeitet von einem Moderator:

Malfrador

Threadripper
Registriert
16 Juni 2013
Beiträge
1.473
Diamanten
396
Minecraft
Malfrador
Ja, das ist normal. Die Actionbar verschwindet schon immer nach einigen Sekunden. Das ist zwar ein Bug, aber einer mit niedriger Priorität und es wurde sich bisher nicht darum gekümmert.
Du kannst das lösen, in dem du einfach eine Runnable nutzt & die Actionbar alle 1-3 Sekunden neusetzt. Für den Client sieht es dann so aus, als würde sie dauerhaft angezeigt werden.
 

Melonemax

Redstoneengineer
Registriert
20 Februar 2021
Beiträge
37
Diamanten
250
Also ich habe das so verstanden und es wird alles Rot makiert

Java:
Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
    @Override
    public void run() {

    }
});
 
Zuletzt bearbeitet von einem Moderator:

Sneaky

Minecrafter
Registriert
29 März 2021
Beiträge
2
Diamanten
250
Die Methode scheduleSyncRepeatingTask nimmt zusätzlich noch zwei weitere Parameter.
1. "delay", das heisst die Zeit bevor die run()-Methode das erste Mal ausgeführt wird.
2. "period", das heisst die Zeit nachdem die run()- Methode wieder ausgeführt werden soll.

Das ganze sieht dann z.B. so aus:

Java:
Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
            @Override
            public void run() {

            }
        }, 0, 60 );
 

Rengobli

Minecrafter
Registriert
14 August 2015
Beiträge
16
Diamanten
290
Minecraft
Rengobli
Falls es noch von Nöten ist würde ich das ganze noch kurz ergänzen:
  • Nachdem du die Nachricht anscheinend länger angezeigt haben willst benötigst du einen Runnable/Scheduler, ja. Bitte denk aber daran, dass sich Minecraft alles von einem Main Thread holt und du diesen nicht unnötig belasten solltest. Benachrichtigungen kannst du wunderbar asynchron verteilen.
  • Nutze keinen Scheduler sondern einen Runnable.
BukkitRunnable:
new BukkitRunnable() {
            
            @Override
            public void run() {
                
                StringBuilder sb = new StringBuilder();
                
                // Deine Nachricht (StringBuilder empfohlen, jedoch nicht notw.)
                
                // Spieler getten und ihnen die Nachricht senden
                
            }
            
        }.runTaskTimerAsynchronously(this, 20L * 2, 20L * 2); // Alle 2 Sekunden

Hoffe ich konnte helfen.
LG
 

JOO200

Braumeister
Registriert
18 Dezember 2016
Beiträge
442
Diamanten
228
Bitte denk aber daran, dass sich Minecraft alles von einem Main Thread holt und du diesen nicht unnötig belasten solltest. Benachrichtigungen kannst du wunderbar asynchron verteilen.
Genau das sollte ein Programmieranfänger nicht machen.
Die Bukkit-API ist nicht threadsafe, Nutzung dieser Methoden können in dieser Minecraft-Version funktionieren, es kann aber zu problemen kommen. Gerade wenn es dann darum geht, die Nachricht nur bei bestimmten Bedingungen anzuzeigen oder bei bestimmten Bedingungen nicht nur diese Nachricht zu senden, kann das schnell zu Problemen kommen.

Und ich frage mich, was du mit "Nutze keinen Scheduler, sondern einen Runnable" meinst. Das macht aus zwei Gründen keinen Sinn:
1. Ein Runnable ist ein Interface, was in beiden Fällen benutzt wird (Du nutzt ein BukkitRunnable, was Runnable erweitert).
2. Der BukkitScheduler wird in beiden Fällen benutzt:
Aktuelle Implementierung BukkitRunnable:
    @NotNull
    public synchronized BukkitTask runTaskTimerAsynchronously(@NotNull Plugin plugin, long delay, long period) throws IllegalArgumentException, IllegalStateException {
        checkNotYetScheduled();
        return setupTask(Bukkit.getScheduler().runTaskTimerAsynchronously(plugin, (Runnable) this, delay, period));
    }

Auch wenn dein Rat hilfreich gemeint ist, ist er hier wohl eher verwirrend als hilfreich.
 

iTz_Proph3t

Das hier liest doch eh kein Schwein...
Moderator
Administrator
Registriert
24 Oktober 2012
Beiträge
1.347
Diamanten
1.452
Minecraft
iTz_Proph3t
das Probleme ist schon Sehr Lange gelöst bitte hört auf ihr nach sachen rein zu schrieben ich habe es selber nach 30 minuten Hinbekommen nachem ich diesen Beitrag geschreiben habe

#Closed
Das steht aber nirgends. Wenn du uns das nicht sagst, wird davon ausgegangen, dass du noch Hilfe brauchst. Das nächste mal einfach kurz reinschreiben, dass das Problem gelöst wurde, gerne auch mit einer Lösung, sollten andere das Problem auch haben ;)
 
Status
Für weitere Antworten geschlossen.
Oben