Using a default implementation of IPlayerManager and IOffPlayer with minimal functionnalities, for standalone apps (discord bots, ...)
This commit is contained in:
parent
e8c93a0676
commit
54ffb4eddd
@ -22,7 +22,26 @@ import net.md_5.bungee.api.chat.BaseComponent;
|
|||||||
|
|
||||||
public abstract class IPlayerManager<OP extends IOnlinePlayer, OF extends IOffPlayer> {
|
public abstract class IPlayerManager<OP extends IOnlinePlayer, OF extends IOffPlayer> {
|
||||||
private static IPlayerManager<?, ?> instance;
|
private static IPlayerManager<?, ?> instance;
|
||||||
public static synchronized IPlayerManager<?, ?> getInstance() { return instance; }
|
|
||||||
|
public static synchronized IPlayerManager<?, ?> getInstance() {
|
||||||
|
if (instance == null) {
|
||||||
|
try {
|
||||||
|
new StandalonePlayerManager(); // will set the instance value itself (see IPlayerManager constructor)
|
||||||
|
} catch (DBInitTableException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static synchronized void setInstance(IPlayerManager<?, ?> newInstance) {
|
||||||
|
if (instance != null && !(instance instanceof StandalonePlayerManager)) {
|
||||||
|
throw new IllegalStateException("only one instance of playerManager is possible");
|
||||||
|
}
|
||||||
|
instance = newInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private Map<UUID, OP> onlinePlayers = Collections.synchronizedMap(new HashMap<>());
|
private Map<UUID, OP> onlinePlayers = Collections.synchronizedMap(new HashMap<>());
|
||||||
@ -33,9 +52,7 @@ public abstract class IPlayerManager<OP extends IOnlinePlayer, OF extends IOffPl
|
|||||||
|
|
||||||
|
|
||||||
public IPlayerManager() throws DBInitTableException {
|
public IPlayerManager() throws DBInitTableException {
|
||||||
synchronized (IPlayerManager.class) {
|
setInstance(this);
|
||||||
instance = this;
|
|
||||||
}
|
|
||||||
|
|
||||||
DB.initTable(SQLPlayer.class);
|
DB.initTable(SQLPlayer.class);
|
||||||
DB.initTable(SQLPlayerConfig.class);
|
DB.initTable(SQLPlayerConfig.class);
|
||||||
|
@ -0,0 +1,38 @@
|
|||||||
|
package fr.pandacube.lib.core.players;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/* package */ class StandaloneOffPlayer implements IOffPlayer {
|
||||||
|
|
||||||
|
private final UUID uniqueId;
|
||||||
|
|
||||||
|
public StandaloneOffPlayer(UUID id) {
|
||||||
|
if (id == null) throw new IllegalArgumentException("id cannot be null");
|
||||||
|
uniqueId = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public UUID getUniqueId() {
|
||||||
|
return uniqueId;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isOnline() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IOnlinePlayer getOnlineInstance() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String displayName = null;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDisplayName() {
|
||||||
|
if (displayName == null)
|
||||||
|
displayName = getDisplayNameFromPermissionSystem();
|
||||||
|
return displayName;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,32 @@
|
|||||||
|
package fr.pandacube.lib.core.players;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import fr.pandacube.lib.core.chat.Chat;
|
||||||
|
import fr.pandacube.lib.core.db.DBInitTableException;
|
||||||
|
import fr.pandacube.lib.core.util.Log;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A standalone player manager, using an implementation of {@link IPlayerManager}
|
||||||
|
* that does not manage online players. This is used to ease access to players data
|
||||||
|
* on standalone applications (web api, discord bot, ...)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
/* package */ class StandalonePlayerManager extends IPlayerManager<IOnlinePlayer, StandaloneOffPlayer> {
|
||||||
|
|
||||||
|
public StandalonePlayerManager() throws DBInitTableException {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected StandaloneOffPlayer newOffPlayerInstance(UUID p) {
|
||||||
|
return new StandaloneOffPlayer(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void sendMessageToConsole(Component message) {
|
||||||
|
Log.info(Chat.chatComponent(message).getLegacyText());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user