-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDevoteMePlugin.java
More file actions
123 lines (102 loc) · 4.2 KB
/
DevoteMePlugin.java
File metadata and controls
123 lines (102 loc) · 4.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package com.devoteme.minecraft;
import com.devoteme.minecraft.api.DevoteMeApiClient;
import com.devoteme.minecraft.api.DevoteMeParser;
import com.devoteme.minecraft.cache.ContentCache;
import com.devoteme.minecraft.commands.DevotionCommand;
import com.devoteme.minecraft.commands.VotdCommand;
import com.devoteme.minecraft.holograms.DecentHologramsService;
import com.devoteme.minecraft.holograms.HologramService;
import com.devoteme.minecraft.listeners.LoginListener;
import com.devoteme.minecraft.model.Votd;
import com.devoteme.minecraft.storage.PlayerDataStore;
import com.devoteme.minecraft.storage.VotdLocationStore;
import com.devoteme.minecraft.util.Text;
import org.bukkit.Bukkit;
import org.bukkit.command.PluginCommand;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import java.util.concurrent.CompletableFuture;
public class DevoteMePlugin extends JavaPlugin {
private DevoteMeApiClient api;
private ContentCache cache;
private VotdLocationStore locationStore;
private PlayerDataStore playerDataStore;
private HologramService holograms;
@Override
public void onEnable() {
saveDefaultConfig();
this.cache = new ContentCache();
this.api = new DevoteMeApiClient(
getConfig().getString("devoteme.baseUrl", ""),
getConfig().getString("devoteme.apiKey", "")
);
this.locationStore = new VotdLocationStore(this);
this.playerDataStore = new PlayerDataStore(this);
// Holograms (soft)
this.holograms = new DecentHologramsService(this, cache, locationStore);
// listeners
Bukkit.getPluginManager().registerEvents(new LoginListener(this), this);
// commands
PluginCommand votd = getCommand("votd");
if (votd != null) {
VotdCommand cmd = new VotdCommand(this, cache, locationStore, holograms);
votd.setExecutor(cmd);
votd.setTabCompleter(cmd);
}
PluginCommand devotion = getCommand("devotion");
if (devotion != null) {
DevotionCommand cmd = new DevotionCommand(this, cache);
devotion.setExecutor(cmd);
}
// Load stored data
locationStore.load();
playerDataStore.load();
// Initial refresh now
refreshAllAsync().whenComplete((v, ex) -> {
if (ex != null) getLogger().warning("Initial refresh failed: " + ex.getMessage());
Bukkit.getScheduler().runTask(this, () -> holograms.updateAllFromCache());
});
// Schedule repeating refresh every refreshHours
long hours = getConfig().getLong("devoteme.refreshHours", 12);
if (hours < 1) hours = 12;
long ticks = hours * 60L * 60L * 20L;
Bukkit.getScheduler().runTaskTimerAsynchronously(this, () -> {
refreshAllAsync().whenComplete((v, ex) -> {
if (ex != null) getLogger().warning("Scheduled refresh failed: " + ex.getMessage());
Bukkit.getScheduler().runTask(this, () -> holograms.updateAllFromCache());
});
}, ticks, ticks);
}
public CompletableFuture<Void> refreshAllAsync() {
CompletableFuture<Void> a = refreshVotdAsync();
CompletableFuture<Void> b = refreshDevotionAsync();
return CompletableFuture.allOf(a, b);
}
public CompletableFuture<Void> refreshVotdAsync() {
return api.getJson("/votd/get")
.thenApply(DevoteMeParser::parseVotd)
.thenAccept(cache::setVotd);
}
public CompletableFuture<Void> refreshDevotionAsync() {
return api.getJson("/devotion/get")
.thenApply(DevoteMeParser::parseDevotion)
.thenAccept(cache::setDevotion);
}
public void sendVotdTo(Player p) {
Votd v = cache.getVotd();
if (v == null) {
p.sendMessage(Text.render(getConfig().getString("messages.loading", "<yellow>Loading...</yellow>")));
return;
}
for (String line : getConfig().getStringList("votd.chatFormat")) {
p.sendMessage(Text.render(line, v));
}
}
public void sendNoPerm(org.bukkit.command.CommandSender sender) {
sender.sendMessage(Text.render(getConfig().getString("messages.noPermission", "<red>No permission.</red>")));
}
public ContentCache getCache() { return cache; }
public VotdLocationStore getLocationStore() { return locationStore; }
public PlayerDataStore getPlayerDataStore() { return playerDataStore; }
public HologramService getHolograms() { return holograms; }
}