-
-
Notifications
You must be signed in to change notification settings - Fork 131
/
PlayersManagerImpl.java
170 lines (136 loc) · 5.48 KB
/
PlayersManagerImpl.java
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
package com.bgsoftware.superiorskyblock.player;
import com.bgsoftware.superiorskyblock.SuperiorSkyblockPlugin;
import com.bgsoftware.superiorskyblock.api.handlers.PlayersManager;
import com.bgsoftware.superiorskyblock.api.island.Island;
import com.bgsoftware.superiorskyblock.api.island.PlayerRole;
import com.bgsoftware.superiorskyblock.api.player.container.PlayersContainer;
import com.bgsoftware.superiorskyblock.api.wrappers.SuperiorPlayer;
import com.bgsoftware.superiorskyblock.core.Manager;
import com.bgsoftware.superiorskyblock.core.SequentialListBuilder;
import com.bgsoftware.superiorskyblock.core.database.bridge.PlayersDatabaseBridge;
import com.bgsoftware.superiorskyblock.core.logging.Debug;
import com.bgsoftware.superiorskyblock.core.logging.Log;
import com.google.common.base.Preconditions;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import java.util.List;
import java.util.UUID;
import java.util.function.Predicate;
@SuppressWarnings("WeakerAccess")
public class PlayersManagerImpl extends Manager implements PlayersManager {
private PlayersContainer playersContainer;
public PlayersManagerImpl(SuperiorSkyblockPlugin plugin) {
super(plugin);
}
@Override
public void loadData() {
// Data is loaded by the database bridge.
if (this.playersContainer == null)
throw new RuntimeException("PlayersManager was not initialized correctly. Contact Ome_R regarding this!");
}
@Override
public SuperiorPlayer getSuperiorPlayer(String name) {
Preconditions.checkNotNull(name, "name parameter cannot be null.");
return this.playersContainer.getSuperiorPlayer(name);
}
@Override
public SuperiorPlayer getSuperiorPlayer(Player player) {
Preconditions.checkNotNull(player, "player parameter cannot be null.");
return player.hasMetadata("NPC") ? new SuperiorNPCPlayer(player) : getSuperiorPlayer(player.getUniqueId());
}
@Override
public SuperiorPlayer getSuperiorPlayer(UUID uuid) {
Preconditions.checkNotNull(uuid, "uuid parameter cannot be null.");
SuperiorPlayer superiorPlayer = this.playersContainer.getSuperiorPlayer(uuid);
if (superiorPlayer == null) {
superiorPlayer = plugin.getFactory().createPlayer(uuid);
this.playersContainer.addPlayer(superiorPlayer);
PlayersDatabaseBridge.insertPlayer(superiorPlayer);
}
return superiorPlayer;
}
@Override
public List<SuperiorPlayer> getAllPlayers() {
return this.playersContainer.getAllPlayers();
}
@Override
@Deprecated
public PlayerRole getPlayerRole(int index) {
return plugin.getRoles().getPlayerRole(index);
}
@Override
@Deprecated
public PlayerRole getPlayerRoleFromId(int id) {
return plugin.getRoles().getPlayerRoleFromId(id);
}
@Override
@Deprecated
public PlayerRole getPlayerRole(String name) {
return plugin.getRoles().getPlayerRole(name);
}
@Override
@Deprecated
public PlayerRole getDefaultRole() {
return plugin.getRoles().getDefaultRole();
}
@Override
@Deprecated
public PlayerRole getLastRole() {
return plugin.getRoles().getLastRole();
}
@Override
@Deprecated
public PlayerRole getGuestRole() {
return plugin.getRoles().getGuestRole();
}
@Override
@Deprecated
public PlayerRole getCoopRole() {
return plugin.getRoles().getCoopRole();
}
@Override
@Deprecated
public List<PlayerRole> getRoles() {
return plugin.getRoles().getRoles();
}
@Override
public PlayersContainer getPlayersContainer() {
return this.playersContainer;
}
public void setPlayersContainer(@NotNull PlayersContainer playersContainer) {
this.playersContainer = playersContainer;
}
public SuperiorPlayer getSuperiorPlayer(CommandSender commandSender) {
return getSuperiorPlayer((Player) commandSender);
}
public List<SuperiorPlayer> matchAllPlayers(Predicate<? super SuperiorPlayer> predicate) {
return new SequentialListBuilder<SuperiorPlayer>()
.filter(predicate)
.build(this.playersContainer.getAllPlayers());
}
public void replacePlayers(SuperiorPlayer originPlayer, SuperiorPlayer newPlayer) {
Log.debug(Debug.REPLACE_PLAYER, originPlayer.getName(), newPlayer.getName());
newPlayer.merge(originPlayer);
// We first want to replace the player for his own island
Island playerIsland = originPlayer.getIsland();
if (playerIsland != null)
playerIsland.replacePlayers(originPlayer, newPlayer);
for (Island island : plugin.getGrid().getIslands()) {
if (island != playerIsland)
island.replacePlayers(originPlayer, newPlayer);
}
plugin.getEventsBus().callPlayerReplaceEvent(originPlayer, newPlayer);
}
// Updating last time status
public void savePlayers() {
for (Player player : Bukkit.getOnlinePlayers())
PlayersDatabaseBridge.saveLastTimeStatus(getSuperiorPlayer(player));
List<SuperiorPlayer> modifiedPlayers = new SequentialListBuilder<SuperiorPlayer>()
.filter(PlayersDatabaseBridge::isModified)
.build(getAllPlayers());
if (!modifiedPlayers.isEmpty())
modifiedPlayers.forEach(PlayersDatabaseBridge::executeFutureSaves);
}
}