Skip to content

Instantly share code, notes, and snippets.

@extendedclip
Created April 13, 2016 12:43
Show Gist options
  • Save extendedclip/710a88fb088561e04777e5e57e06b35d to your computer and use it in GitHub Desktop.
Save extendedclip/710a88fb088561e04777e5e57e06b35d to your computer and use it in GitHub Desktop.
package com.extendedclip.papi.expansion.tokenmanager;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import me.clip.placeholderapi.PlaceholderAPI;
import me.clip.placeholderapi.expansion.Cacheable;
import me.clip.placeholderapi.expansion.Cleanable;
import me.clip.placeholderapi.expansion.Configurable;
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
import me.clip.placeholderapi.expansion.Taskable;
import me.realized.tm.api.TMAPI;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
public class TokenManagerExpansion extends PlaceholderExpansion implements Taskable, Cacheable, Cleanable, Configurable {
private final Map<UUID, Long> tokens = new ConcurrentHashMap<UUID, Long>();
private BukkitTask task;
private int fetchInterval;
@Override
public boolean canRegister() {
return Bukkit.getPluginManager().getPlugin(getPlugin()) != null;
}
@Override
public boolean register() {
int interval = getInt("check_interval", 60);
if (interval > 0) {
fetchInterval = interval;
} else {
fetchInterval = 60;
}
return PlaceholderAPI.registerPlaceholderHook(getIdentifier(), this);
}
@Override
public String getAuthor() {
return "clip";
}
@Override
public String getIdentifier() {
return "tokenmanager";
}
@Override
public String getPlugin() {
return "TokenManager";
}
@Override
public String getVersion() {
return "1.0.0";
}
@Override
public Map<String, Object> getDefaults() {
final Map<String, Object> defaults = new HashMap<String, Object>();
defaults.put("check_interval", 30);
return defaults;
}
@Override
public void start() {
task = new BukkitRunnable() {
@Override
public void run() {
if (tokens.isEmpty()) {
return;
}
for (UUID u : tokens.keySet()) {
tokens.put(u, TMAPI.getTokens(u));
}
}
}.runTaskTimerAsynchronously(getPlaceholderAPI(), 100L, 20L*fetchInterval);
}
@Override
public void stop() {
if (task != null) {
try {
task.cancel();
} catch(IllegalStateException ex) {
//uh oh
}
task = null;
}
}
@Override
public void cleanup(Player p) {
if (tokens.containsKey(p.getUniqueId())) {
tokens.remove(p.getUniqueId());
}
}
@Override
public void clear() {
tokens.clear();
}
@Override
public String onPlaceholderRequest(Player p, String identifier) {
if (p == null) {
return "";
}
if (identifier.equals("tokens")) {
if (tokens.containsKey(p.getUniqueId())) {
return String.valueOf(tokens.get(p.getUniqueId()));
}
tokens.put(p.getUniqueId(), 0l);
return "0";
}
return null;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment