All source projects
MrUltimateLibrary Source
Standalone source project / 68 files
MrUltimateLibrary is the backbone of all my plugins; it offers features that facilitate plugin creation, maintenance, and updates.
java
MrUltimateLibrary/src/main/java/eu/mrneznamy/mrultimatelibrary/actionbar/MrLibActionBar.java
JAVA · Read-only source
package eu.mrneznamy.mrultimatelibrary.actionbar;
import eu.mrneznamy.mrultimatelibrary.scheduler.MrLibScheduler;
import eu.mrneznamy.mrultimatelibrary.utils.MrLibColors;
import net.md_5.bungee.api.ChatMessageType;
import net.md_5.bungee.api.chat.TextComponent;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.function.Function;
/**
* ActionBar display system
*/
public class MrLibActionBar {
private final JavaPlugin plugin;
private final Map<UUID, ActionBarTask> tasks = new HashMap<>();
public MrLibActionBar(JavaPlugin plugin) {
this.plugin = plugin;
}
/**
* Show message once
*/
public void show(Player player, String message) {
clearTask(player);
player.spigot().sendMessage(ChatMessageType.ACTION_BAR,
TextComponent.fromLegacyText(MrLibColors.colorize(message, player)));
}
/**
* Show message for X ticks
*/
public void showTicks(Player player, String message, long ticks) {
clearTask(player);
ActionBarTask task = new ActionBarTask(player, message, ticks, false);
tasks.put(player.getUniqueId(), task);
task.start(plugin);
}
/**
* Show message for X seconds
*/
public void showSeconds(Player player, String message, int seconds) {
showTicks(player, message, seconds * 20L);
}
/**
* Show dynamic message (updates every tick)
*/
public void showDynamic(Player player, Function<Player, String> messageProvider, long durationTicks) {
clearTask(player);
ActionBarTask task = new ActionBarTask(player, messageProvider, durationTicks);
tasks.put(player.getUniqueId(), task);
task.start(plugin);
}
/**
* Clear actionbar for player
*/
public void clear(Player player) {
clearTask(player);
player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(""));
}
/**
* Clear all active actionbars
*/
public void clearAll() {
tasks.values().forEach(ActionBarTask::cancel);
tasks.clear();
}
private void clearTask(Player player) {
ActionBarTask task = tasks.remove(player.getUniqueId());
if (task != null) {
task.cancel();
}
}
/**
* Internal task handler
*/
private class ActionBarTask implements Runnable {
private final Player player;
private String staticMessage;
private Function<Player, String> dynamicMessage;
private long remainingTicks;
private MrLibScheduler.MrLibTask task;
public ActionBarTask(Player player, String message, long ticks, boolean unused) {
this.player = player;
this.staticMessage = message;
this.remainingTicks = ticks;
}
public ActionBarTask(Player player, Function<Player, String> messageProvider, long ticks) {
this.player = player;
this.dynamicMessage = messageProvider;
this.remainingTicks = ticks;
}
public void start(JavaPlugin plugin) {
task = MrLibScheduler.runTaskTimer(plugin, this, 0L, 1L);
}
@Override
public void run() {
if (!player.isOnline() || remainingTicks <= 0) {
cancel();
tasks.remove(player.getUniqueId());
return;
}
String message = dynamicMessage != null
? dynamicMessage.apply(player)
: staticMessage;
player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(MrLibColors.colorize(message, player)));
remainingTicks--;
}
public void cancel() {
if (task != null) {
task.cancel();
}
}
}
}
144 linesGNU GENERAL PUBLIC LICENSE · Version 3, 29 June 2007 · UTF-8 · Read only