user-control-oriented scoreboard library for use with the Spigot API
this project allows in-depth yet easy-to-use advanced scoreboard creation and manipulation for the Spigot API.
it is important to note that this is a "per-player" scoreboard library; however updaters can be shared across multiple scoreboards so this should not be an issue.
- Lines up to 48 characters
- Choose how often views update automatically
- Context/player-specific
- Multiple views means you can easily swap what your scoreboards look like
this project can be compiled into a plugin jar via maven + run on your server, or shaded into your plugin as a maven dependency.
Add this to your repositories:
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
and this to your dependencies:
<dependency>
<groupId>com.github.jonahseguin</groupId>
<artifactId>aBsorb</artifactId>
<version>2.0.0</version>
</dependency>
aBsorb uses View
s to display sets of information. You can register different views and switch between them seamlessly.
We also use the ViewProvider
interface to provide said sets of information for a specific view.
Here is an example of how to implement a simple View Provider
import com.jonahseguin.absorb.view.EntryBuilder;
import com.jonahseguin.absorb.view.ViewContext;
import com.jonahseguin.absorb.view.ViewProvider;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import java.util.List;
public class ExampleViewProvider implements ViewProvider {
@Override
public String getTitle(ViewContext viewContext) {
return ChatColor.GOLD + "Example Scoreboard";
}
@Override
public List<String> getLines(ViewContext viewContext) {
Player p = viewContext.getPlayer();
EntryBuilder entryBuilder = new EntryBuilder();
entryBuilder.blank();
entryBuilder.next("&7Your Name: &b" + p.getName());
entryBuilder.next("&7Gamemode: &b" + p.getGameMode().name());
entryBuilder.blank();
return entryBuilder.build();
}
@Override
public void onUpdate(ViewContext context) {
// Do something after it updates if you want
}
}
To register a scoreboard, we need an instance of Absorb
. This instance is player-specific and handles their scoreboard.
For most cases, you can use one ViewUpdater
instance for all scoreboards, and this will async. update scoreboards at the specified frequency:
Absorb absorb = new Absorb(plugin, player, true);
View view = absorb.view("example");
view.provider(new ExampleViewProvider());
absorb.activate("example");
absorb.show();
ViewUpdater viewUpdater = new ViewUpdater(plugin, 2L); // Update every 2 ticks
if (!viewUpdater.isRunning()) {
viewUpdater.start();
}
viewUpdater.registerBoard(absorb);