Compass optimizations

This commit is contained in:
OpenSource 2023-02-15 22:42:04 +01:00
parent 17671b49e6
commit 12d928b4c2
5 changed files with 111 additions and 17 deletions

View File

@ -5,11 +5,15 @@ import java.io.File;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.util.Objects; import java.util.Objects;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import lombok.Getter; import lombok.Getter;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import org.hibernate.SessionFactory; import org.hibernate.SessionFactory;
import os.arcadiadevs.playerservers.hubcore.cache.ServerCache;
import os.arcadiadevs.playerservers.hubcore.commands.CommandManager; import os.arcadiadevs.playerservers.hubcore.commands.CommandManager;
import os.arcadiadevs.playerservers.hubcore.controllers.NodesController; import os.arcadiadevs.playerservers.hubcore.controllers.NodesController;
import os.arcadiadevs.playerservers.hubcore.controllers.ServersController; import os.arcadiadevs.playerservers.hubcore.controllers.ServersController;
@ -43,6 +47,9 @@ public class PsHubCore extends JavaPlugin {
@Getter @Getter
private NodesController nodesController; private NodesController nodesController;
@Getter
private ServerCache serverCache;
@SneakyThrows @SneakyThrows
@Override @Override
public void onEnable() { public void onEnable() {
@ -100,11 +107,11 @@ public class PsHubCore extends JavaPlugin {
spiGui = new SpiGUI(this); spiGui = new SpiGUI(this);
// Initialize ServerCache // Initialize ServerCache
//serverCache = new ServerCache(); serverCache = new ServerCache(serversController);
// Create ServerCache refreshing task // Create ServerCache refreshing task
//ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor(); ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
//executor.scheduleAtFixedRate(serverCache, 1, getConfig().getInt("cache-time"), TimeUnit.SECONDS); executor.scheduleAtFixedRate(serverCache, 1, getConfig().getInt("cache.cache-time"), TimeUnit.SECONDS);
} }
/** /**

View File

@ -0,0 +1,30 @@
package os.arcadiadevs.playerservers.hubcore.cache;
import java.util.HashSet;
import lombok.Getter;
import os.arcadiadevs.playerservers.hubcore.controllers.ServersController;
import os.arcadiadevs.playerservers.hubcore.models.CachedServer;
public class ServerCache implements Runnable {
@Getter
private final HashSet<CachedServer> servers;
private final ServersController serversController;
public ServerCache(ServersController serversController) {
this.serversController = serversController;
this.servers = new HashSet<>();
}
/**
* Refreshes the cache.
*/
@Override
public void run() {
HashSet<CachedServer> newCache = new HashSet<>();
serversController.getServers().forEach(server -> newCache.add(new CachedServer(server)));
servers.clear();
servers.addAll(newCache);
}
}

View File

@ -29,14 +29,22 @@ public class SelectorGui {
final var instance = PsHubCore.getInstance(); final var instance = PsHubCore.getInstance();
final var menu = instance.getSpiGui() final var menu = instance.getSpiGui()
.create(ChatUtil.translate(instance.getConfig().getString("gui.selector.menu.name")), 5); .create(ChatUtil.translate(instance.getConfig().getString("gui.selector.menu.name")), 5);
final var useCache = instance.getConfig().getBoolean("cache.enabled");
menu.setAutomaticPaginationEnabled(true); menu.setAutomaticPaginationEnabled(true);
menu.setBlockDefaultInteractions(true); menu.setBlockDefaultInteractions(true);
final var servers = PsHubCore.getInstance() final var servers = useCache
?
PsHubCore.getInstance()
.getServerCache()
.getServers()
:
PsHubCore.getInstance()
.getServersController() .getServersController()
.getServers(); .getServers();
servers.forEach(server -> { servers.forEach(server -> {
final var onlinexMaterial = final var onlinexMaterial =
XMaterial.matchXMaterial(instance.getConfig().getString("gui.selector.menu.online.block")) XMaterial.matchXMaterial(instance.getConfig().getString("gui.selector.menu.online.block"))
@ -46,21 +54,23 @@ public class SelectorGui {
instance.getConfig().getString("gui.selector.menu.offline.block")) instance.getConfig().getString("gui.selector.menu.offline.block"))
.orElse(XMaterial.RED_TERRACOTTA).parseItem(); .orElse(XMaterial.RED_TERRACOTTA).parseItem();
final var serverInfo = server.getInfo();
final var itemBuilder = new ItemBuilder( final var itemBuilder = new ItemBuilder(
server.getStatus() == ServerStatus.ONLINE ? onlinexMaterial : offlinexMaterial); serverInfo.status() == ServerStatus.ONLINE ? onlinexMaterial : offlinexMaterial);
final var online = server.getStatus() == ServerStatus.ONLINE; final var online = serverInfo.status() == ServerStatus.ONLINE;
var lore = instance.getConfig().getStringList( var lore = instance.getConfig().getStringList(
server.getStatus() == ServerStatus.ONLINE ? "gui.selector.menu.online.lore" : serverInfo.status() == ServerStatus.ONLINE ? "gui.selector.menu.online.lore" :
"gui.selector.menu.offline.lore"); "gui.selector.menu.offline.lore");
lore = lore.stream() lore = lore.stream()
.map(s -> s.replaceAll("%server%", server.getId())) .map(s -> s.replaceAll("%server%", server.getId()))
.map(s -> s.replaceAll("%status%", online ? "&aOnline" : "&cOffline")) .map(s -> s.replaceAll("%status%", online ? "&aOnline" : "&cOffline"))
.map(s -> s.replaceAll("%players%", online ? server.getInfo().players() + "" : "0")) .map(s -> s.replaceAll("%players%", online ? serverInfo.players() + "" : "0"))
.map(s -> s.replaceAll("%maxplayers%", online ? server.getInfo().maxPlayers() + "" : "0")) .map(s -> s.replaceAll("%maxplayers%", online ? serverInfo.maxPlayers() + "" : "0"))
.map(s -> s.replaceAll("%port%", server.getDefaultAllocation().getPort() + "")) .map(s -> s.replaceAll("%port%", server.getDefaultAllocation().getPort() + ""))
.map(s -> s.replaceAll("%motd%", online ? server.getInfo().motd() : "&cOffline")) .map(s -> s.replaceAll("%motd%", online ? serverInfo.motd() : "&cOffline"))
.map(s -> s.replaceAll("%node%", server.getNode().getName())) .map(s -> s.replaceAll("%node%", server.getNode().getName()))
.map(s -> s.replaceAll("%owner%", server.getOfflinePlayer().getName())) .map(s -> s.replaceAll("%owner%", server.getOfflinePlayer().getName()))
.map(s -> s.replaceAll("%ip%", server.getNode().getIp())) .map(s -> s.replaceAll("%ip%", server.getNode().getIp()))
@ -71,10 +81,10 @@ public class SelectorGui {
online ? "gui.selector.menu.online.name" : "gui.selector.menu.offline.name") online ? "gui.selector.menu.online.name" : "gui.selector.menu.offline.name")
.replaceAll("%server%", server.getId()) .replaceAll("%server%", server.getId())
.replaceAll("%status%", online ? "&aOnline" : "&cOffline") .replaceAll("%status%", online ? "&aOnline" : "&cOffline")
.replaceAll("%players%", online ? server.getInfo().players() + "" : "0") .replaceAll("%players%", online ? serverInfo.players() + "" : "0")
.replaceAll("%maxplayers%", online ? server.getInfo().maxPlayers() + "" : "0") .replaceAll("%maxplayers%", online ? serverInfo.maxPlayers() + "" : "0")
.replaceAll("%port%", server.getDefaultAllocation().getPort() + "") .replaceAll("%port%", server.getDefaultAllocation().getPort() + "")
.replaceAll("%motd%", online ? server.getInfo().motd() : "&cOffline") .replaceAll("%motd%", online ? serverInfo.motd() : "&cOffline")
.replaceAll("%node%", server.getNode().getName()) .replaceAll("%node%", server.getNode().getName())
.replaceAll("%owner%", server.getOfflinePlayer().getName()) .replaceAll("%owner%", server.getOfflinePlayer().getName())
.replaceAll("%ip%", server.getNode().getIp()) .replaceAll("%ip%", server.getNode().getIp())

View File

@ -0,0 +1,43 @@
package os.arcadiadevs.playerservers.hubcore.models;
import lombok.Getter;
import lombok.Setter;
import os.arcadiadevs.playerservers.hubcore.enums.ServerStatus;
import os.arcadiadevs.playerservers.hubcore.utils.ServerPinger;
@Getter
@Setter
public class CachedServer extends Server {
private ServerStatus status;
private ServerPinger.PingResult pingResult;
public CachedServer(Server server) {
this.setId(server.getId());
this.setExternalId(server.getExternalId());
this.setExternalUuid(server.getExternalUuid());
this.setOwner(server.getOwner());
this.setNode(server.getNode());
this.setAllocations(server.getAllocations());
this.setDefaultAllocation(server.getDefaultAllocation());
ServerPinger.PingResult pingResult = server.getInfo();
setStatus(pingResult.status());
setPingResult(pingResult);
}
@Override
public ServerPinger.PingResult getInfo() {
System.out.println("Getting cached info");
return pingResult;
}
@Override
public ServerStatus getStatus() {
System.out.println("Getting cached status");
return status;
}
}

View File

@ -14,7 +14,11 @@ mysql:
debug: false debug: false
get-from-file: false get-from-file: false
# For how long should we keep Server Data cached? cache:
# Should we cache Server Data for the servers gui?
enabled: false
# For how long should we keep Server Data cached? (in seconds)
cache-time: 20 cache-time: 20
messages: messages: