-
Notifications
You must be signed in to change notification settings - Fork 39
Expand file tree
/
Copy pathZStorageManager.java
More file actions
107 lines (86 loc) · 4.05 KB
/
Copy pathZStorageManager.java
File metadata and controls
107 lines (86 loc) · 4.05 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
package fr.maxlego08.essentials.storage;
import fr.maxlego08.essentials.api.EssentialsPlugin;
import fr.maxlego08.essentials.api.event.events.user.UserJoinEvent;
import fr.maxlego08.essentials.api.event.events.user.UserQuitEvent;
import fr.maxlego08.essentials.api.messages.Message;
import fr.maxlego08.essentials.api.sanction.Sanction;
import fr.maxlego08.essentials.api.storage.IStorage;
import fr.maxlego08.essentials.api.storage.StorageManager;
import fr.maxlego08.essentials.api.storage.StorageType;
import fr.maxlego08.essentials.storage.storages.JsonStorage;
import fr.maxlego08.essentials.storage.storages.SqlStorage;
import fr.maxlego08.essentials.zutils.utils.TimerBuilder;
import fr.maxlego08.essentials.zutils.utils.ZUtils;
import net.kyori.adventure.text.Component;
import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.player.PlayerLoginEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import java.time.Duration;
import java.util.UUID;
public class ZStorageManager extends ZUtils implements StorageManager {
private final IStorage iStorage;
private final EssentialsPlugin plugin;
public ZStorageManager(EssentialsPlugin plugin) {
this.plugin = plugin;
StorageType storageType = plugin.getConfiguration().getStorageType();
this.iStorage = switch (storageType) {
case HIKARICP, SQLITE, MYSQL, MARIADB -> new SqlStorage(plugin, storageType);
default -> new JsonStorage(plugin);
};
}
@Override
public void onEnable() {
this.iStorage.onEnable();
Bukkit.getOnlinePlayers().forEach(player -> this.iStorage.createOrLoad(player.getUniqueId(), player.getName()));
}
@Override
public void onDisable() {
this.iStorage.onDisable();
}
@Override
public IStorage getStorage() {
return this.iStorage;
}
@Override
public StorageType getType() {
return this.plugin.getStorageManager().getType();
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onLogin(PlayerLoginEvent event) {
if (this.plugin.getConfiguration().getBlacklistUuids().contains(event.getPlayer().getUniqueId())) {
event.disallow(PlayerLoginEvent.Result.KICK_OTHER, Component.text("Unable to verify your connection, please try again."));
this.plugin.getLogger().info("A blacklist player try to connect: " + event.getPlayer().getName() + " (" + event.getPlayer().getUniqueId() + ")");
return;
}
PlayerLoginEvent.Result result = event.getResult();
if (result != PlayerLoginEvent.Result.ALLOWED) return;
UUID playerUuid = event.getPlayer().getUniqueId();
String playerName = event.getPlayer().getName();
if (this.iStorage.isBan(playerUuid)) {
Sanction sanction = this.iStorage.getBan(playerUuid);
if (sanction != null) {
Duration duration = sanction.getDurationRemaining();
this.plugin.getUtils().disallow(event, PlayerLoginEvent.Result.KICK_BANNED, Message.MESSAGE_BAN_JOIN, "%reason%", sanction.getReason(), "%remaining%", TimerBuilder.getStringTime(duration.toMillis()));
} else {
this.plugin.getUtils().disallow(event, PlayerLoginEvent.Result.KICK_BANNED, Message.MESSAGE_BAN_JOIN, "%reason%", "", "%remaining%", "");
}
return;
}
var user = this.iStorage.createOrLoad(playerUuid, playerName);
user.setAddress(event.getAddress().getHostAddress());
var userEvent = new UserJoinEvent(user);
this.plugin.getScheduler().runNextTick(wrappedTask -> userEvent.callEvent());
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onDisconnect(PlayerQuitEvent event) {
var uuid = event.getPlayer().getUniqueId();
var user = this.iStorage.getUser(uuid);
if (user != null) {
var userQuitEvent = new UserQuitEvent(user);
userQuitEvent.callEvent();
}
this.iStorage.onPlayerQuit(uuid);
}
}