Last active
June 9, 2025 12:49
-
-
Save HugoSilvaF/e68af1b5f56dc279fe21 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import org.bukkit.Bukkit; | |
import org.bukkit.ChatColor; | |
import org.bukkit.plugin.Plugin; | |
import org.bukkit.scheduler.BukkitRunnable; | |
import org.bukkit.scoreboard.DisplaySlot; | |
import org.bukkit.scoreboard.Objective; | |
import org.bukkit.scoreboard.Scoreboard; | |
public class ScoreboardScroller { | |
private final Objective objective; | |
private final Plugin plugin; | |
private BukkitRunnable task; | |
private String originalTitle; | |
private ChatColor color = ChatColor.WHITE; | |
private int position = 0; | |
private long speed = 200L; // Em milissegundos | |
public ScoreboardScroller(Plugin plugin, Objective objective, String title) { | |
if (plugin == null) { | |
throw new IllegalArgumentException("Plugin nao pode ser nulo."); | |
} | |
if (objective == null) { | |
throw new IllegalArgumentException("Objective nao pode ser nulo."); | |
} | |
if (!objective.getDisplaySlot().equals(DisplaySlot.SIDEBAR)) { | |
throw new IllegalArgumentException("Objective deve estar no slot SIDEBAR."); | |
} | |
this.plugin = plugin; | |
this.objective = objective; | |
this.originalTitle = title; | |
} | |
public ScoreboardScroller setColor(ChatColor color) { | |
this.color = color; | |
return this; | |
} | |
public ScoreboardScroller setSpeed(long speedInMillis) { | |
this.speed = speedInMillis; | |
return this; | |
} | |
public void start() { | |
if (task != null) { | |
// Se ja estiver rodando, nao faz nada. | |
return; | |
} | |
long ticks = speed / 50; // Converte milissegundos para ticks do servidor (1 tick = 50ms) | |
if (ticks < 1) { | |
ticks = 1; | |
} | |
task = new BukkitRunnable() { | |
@Override | |
public void run() { | |
String animatedTitle = originalTitle + " "; // Adiciona espacos para um efeito de rolagem mais suave | |
String part1 = animatedTitle.substring(position); | |
String part2 = animatedTitle.substring(0, position); | |
String finalTitle = color + part1 + part2; | |
if (finalTitle.length() > 32) { | |
finalTitle = finalTitle.substring(0, 32); | |
} | |
objective.setDisplayName(finalTitle); | |
position++; | |
if (position >= animatedTitle.length()) { | |
position = 0; | |
} | |
} | |
}; | |
task.runTaskTimer(plugin, 0L, ticks); | |
} | |
public void stop() { | |
if (task != null) { | |
task.cancel(); | |
task = null; | |
} | |
objective.setDisplayName(originalTitle); // Restaura o titulo original | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
O que é isso?
Esta classe cria um efeito de texto "rolando" (scrolling) no título de uma scoreboard. É um efeito visual para deixar seu servidor com uma aparência mais profissional e dinâmica.
1. Adicionando ao seu Projeto
Primeiramente, copie o código ScoreboardScroller.java acima e adicione-o ao projeto do seu plugin no mesmo pacote do seu código principal, ou em um sub-pacote (ex: meuplugin.utils).
2. Passo a Passo para Usar
Para que a animação funcione, você precisa de uma scoreboard e um objective já criados e exibidos para o jogador. O local mais comum para configurar isso é no método onEnable() da sua classe principal ou em um evento PlayerJoinEvent.
Passo 1: Criar a Scoreboard e o Objective
Antes de usar o ScoreboardScroller, você precisa ter um "objective" no slot SIDEBAR. Se você ainda não tem um, veja como criar:
Passo 2: Criar e Iniciar a Animação
Agora que você tem o objective, você pode criar uma instância do ScoreboardScroller e iniciar a animação.
Passo 3: Customização (Opcional)
Você pode customizar a cor e a velocidade da animação usando os métodos disponíveis. A customização deve ser feita antes de chamar o método start().
Passo 4: Parando a Animação
Se você precisar parar a animação (por exemplo, no onDisable() do seu plugin), guarde a instância do scroller em uma variável e chame o método stop().
Exemplo Completo (na classe principal do plugin)
Aqui está um exemplo completo de como usar a classe no seu plugin.