Skip to content

Commit

Permalink
Performance improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
ibot3 committed Aug 23, 2022
1 parent b6134b1 commit 6b9be78
Show file tree
Hide file tree
Showing 15 changed files with 213 additions and 117 deletions.
14 changes: 7 additions & 7 deletions pom.xml
Expand Up @@ -6,7 +6,7 @@

<groupId>net.vyhub</groupId>
<artifactId>VyHubMinecraft</artifactId>
<version>1.1.0</version>
<version>1.1.3</version>
<packaging>jar</packaging>

<properties>
Expand Down Expand Up @@ -69,12 +69,12 @@
<scope>provided</scope>
</dependency>

<dependency>
<groupId>net.luckperms</groupId>
<artifactId>api</artifactId>
<version>5.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>net.luckperms</groupId>
<artifactId>api</artifactId>
<version>5.4</version>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
Expand Down
51 changes: 24 additions & 27 deletions src/main/java/net/vyhub/VyHubMinecraft/VyHub.java
@@ -1,24 +1,23 @@
package net.vyhub.VyHubMinecraft;

import com.google.common.reflect.TypeToken;
import net.luckperms.api.LuckPerms;
import net.vyhub.VyHubMinecraft.lib.Cache;
import net.vyhub.VyHubMinecraft.lib.PlayerGivenPermissionListener;
import net.vyhub.VyHubMinecraft.lib.Types;
import net.vyhub.VyHubMinecraft.lib.Utility;
import net.vyhub.VyHubMinecraft.server.*;
import net.luckperms.api.LuckPerms;
import org.bukkit.Bukkit;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitScheduler;

import java.net.http.HttpResponse;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.bukkit.scheduler.BukkitScheduler;


public class VyHub extends JavaPlugin {

Expand All @@ -35,16 +34,21 @@ public class VyHub extends JavaPlugin {

private static Cache<Map<String, String>> configCache = new Cache<>(
"config",
new TypeToken<HashMap<String, String>>() {}.getType()
new TypeToken<HashMap<String, String>>() {
}.getType()
);

public static JavaPlugin plugin;

@Override
public void onEnable() {
plugin = this;

// Plugin startup logic
this.luckPerms = getServer().getServicesManager().load(LuckPerms.class);
new PlayerGivenPermissionListener(this, this.luckPerms).register();

readyCheckTaskID = scheduler.runTaskTimer(this, VyHub::checkReady, 0, 20L*60L).getTaskId();
readyCheckTaskID = scheduler.runTaskTimer(this, VyHub::checkReady, 0, 20L * 60L).getTaskId();
}

@Override
Expand All @@ -53,38 +57,32 @@ public void onDisable() {
}

public static void onReady() {
JavaPlugin plugin = getPlugin(VyHub.class);

scheduler.cancelTask(readyCheckTaskID);
scheduler.cancelTask(playerTimeID);

listenerRegistration();
commandRegistration();
SvRewards.loadExecuted();

scheduler.runTaskTimer(plugin, SvServer::patchServer, 20L*1L, 20L*60L);
scheduler.runTaskTimer(plugin, SvBans::syncBans, 20L*1L, 20L*60L);
scheduler.runTaskTimer(plugin, SvStatistics::playerTime, 20L*1L, 20L*60L);
scheduler.runTaskTimer(plugin, SvRewards::getRewards, 20L*1L, 20L*60L);
scheduler.runTaskTimer(plugin, SvRewards::runDirectRewards, 20L*1L, 20L*60L);
scheduler.runTaskTimer(plugin, SvStatistics::sendPlayerTime, 20L*1L, 20L*60L*30L);
scheduler.runTaskTimer(plugin, SvAdverts::loadAdverts, 20L*1L, 20L*60L*5L);
scheduler.runTaskTimer(plugin, SvAdverts::nextAdvert, 20L*5L, 20L*Integer.parseInt(VyHub.config.getOrDefault("advertInterval", "180")));
scheduler.runTaskTimerAsynchronously(plugin, SvServer::patchServer, 20L * 1L, 20L * 60L);
scheduler.runTaskTimerAsynchronously(plugin, SvBans::syncBans, 20L * 1L, 20L * 60L);
scheduler.runTaskTimerAsynchronously(plugin, SvStatistics::playerTime, 20L * 1L, 20L * 60L);
scheduler.runTaskTimerAsynchronously(plugin, SvRewards::getRewards, 20L * 5L, 20L * 60L);
scheduler.runTaskTimer(plugin, SvRewards::runDirectRewards, 20L * 1L, 20L * 60L);
scheduler.runTaskTimerAsynchronously(plugin, SvStatistics::sendPlayerTime, 20L * 5L, 20L * 60L * 30L);
scheduler.runTaskTimerAsynchronously(plugin, SvAdverts::loadAdverts, 20L * 1L, 20L * 60L * 5L);
scheduler.runTaskTimerAsynchronously(plugin, SvAdverts::nextAdvert, 20L * 5L, 20L * Integer.parseInt(VyHub.config.getOrDefault("advertInterval", "180")));
}


private static void listenerRegistration() {
JavaPlugin plugin = getPlugin(VyHub.class);

PluginManager pluginManager = Bukkit.getPluginManager();
pluginManager.registerEvents(new SvUser(), plugin);
pluginManager.registerEvents(new SvGroups(), plugin);
pluginManager.registerEvents(new SvRewards(), plugin);
}

private static void commandRegistration() {
JavaPlugin plugin = getPlugin(VyHub.class);

plugin.getCommand("login").setExecutor(new SvLogin());
plugin.getCommand("timeban").setExecutor(new SvBans());
plugin.getCommand("warn").setExecutor(new SvWarning());
Expand All @@ -98,11 +96,11 @@ public static Map<String, String> loadConfig() {
logger.log(Level.WARNING, "Config File does not exist. Please update config.json File");

config = new HashMap<>();
config.put("apiURL","");
config.put("apiKey","");
config.put("serverID","");
config.put("advertPrefix","[★] ");
config.put("advertInterval","180");
config.put("apiURL", "");
config.put("apiKey", "");
config.put("serverID", "");
config.put("advertPrefix", "[★] ");
config.put("advertInterval", "180");

configCache.save(config);
} else {
Expand All @@ -113,7 +111,6 @@ public static Map<String, String> loadConfig() {
}

public static void checkReady() {
JavaPlugin plugin = getPlugin(VyHub.class);
Logger logger = plugin.getLogger();

Map<String, String> config = loadConfig();
Expand All @@ -125,8 +122,8 @@ public static void checkReady() {

HttpResponse<String> response = Utility.sendRequest("/user/current", Types.GET);

if (response == null || (response.statusCode() != 200 && response.statusCode() != 307)) {
playerTimeID = scheduler.runTaskTimer(plugin, SvStatistics::playerTime, 20L*1L, 20L*60L).getTaskId();
if (response == null || (response.statusCode() != 200 && response.statusCode() != 307)) {
playerTimeID = scheduler.runTaskTimer(plugin, SvStatistics::playerTime, 20L * 1L, 20L * 60L).getTaskId();
commandRegistration();
logger.warning("Cannot connect to VyHub API! Please follow the installation instructions.");
return;
Expand Down
@@ -0,0 +1,27 @@
package net.vyhub.VyHubMinecraft.event;

import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;

public class VyHubPlayerInitializedEvent extends Event {
private static final HandlerList HANDLERS = new HandlerList();
private final Player player;

public VyHubPlayerInitializedEvent(Player player) {
this.player = player;
}

public static HandlerList getHandlerList() {
return HANDLERS;
}

@Override
public HandlerList getHandlers() {
return HANDLERS;
}

public Player getPlayer() {
return player;
}
}
6 changes: 1 addition & 5 deletions src/main/java/net/vyhub/VyHubMinecraft/lib/Cache.java
Expand Up @@ -2,22 +2,18 @@

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.json.JSONArray;
import org.json.JSONObject;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Type;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.HashMap;


public class Cache<T> {
private String filename;
private Type type;
private Type type;

private Gson gson = new GsonBuilder().setPrettyPrinting().create();

Expand Down
@@ -1,19 +1,17 @@
package net.vyhub.VyHubMinecraft.lib;


import net.vyhub.VyHubMinecraft.VyHub;

import net.luckperms.api.LuckPerms;
import net.luckperms.api.event.EventBus;
import net.luckperms.api.event.node.NodeAddEvent;
import net.luckperms.api.event.node.NodeRemoveEvent;
import net.luckperms.api.model.user.User;
import net.luckperms.api.node.Node;

import net.luckperms.api.node.types.InheritanceNode;
import net.luckperms.api.node.types.PermissionNode;
import net.luckperms.api.node.types.PrefixNode;
import net.luckperms.api.node.types.SuffixNode;
import net.vyhub.VyHubMinecraft.VyHub;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;

Expand Down
2 changes: 2 additions & 0 deletions src/main/java/net/vyhub/VyHubMinecraft/lib/Utility.java
Expand Up @@ -11,6 +11,7 @@
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
import java.util.HashMap;
import java.util.logging.Logger;

Expand Down Expand Up @@ -39,6 +40,7 @@ public static HttpResponse<String> sendRequestBody(String endpoint, Types type,
.uri(URI.create(VyHub.config.get("apiURL") + endpoint))
.setHeader("Authorization", "Bearer " + VyHub.config.get("apiKey"))
.method(type.name(), (body != null ? HttpRequest.BodyPublishers.ofString(body) : HttpRequest.BodyPublishers.noBody()))
.timeout(Duration.ofSeconds(2))
.build();

HttpResponse<String> response = null;
Expand Down
5 changes: 2 additions & 3 deletions src/main/java/net/vyhub/VyHubMinecraft/server/SvAdverts.java
Expand Up @@ -3,7 +3,6 @@
import com.google.common.reflect.TypeToken;
import com.google.gson.Gson;
import net.vyhub.VyHubMinecraft.Entity.VyHubAdvert;
import net.vyhub.VyHubMinecraft.Entity.VyHubServer;
import net.vyhub.VyHubMinecraft.VyHub;
import net.vyhub.VyHubMinecraft.lib.Types;
import net.vyhub.VyHubMinecraft.lib.Utility;
Expand All @@ -12,7 +11,6 @@

import java.net.http.HttpResponse;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;

public class SvAdverts {
Expand All @@ -28,7 +26,8 @@ public static void loadAdverts() {
return;
}

adverts = gson.fromJson(response.body(), new TypeToken<ArrayList<VyHubAdvert>>() {}.getType());
adverts = gson.fromJson(response.body(), new TypeToken<ArrayList<VyHubAdvert>>() {
}.getType());
}

public static void nextAdvert() {
Expand Down
23 changes: 17 additions & 6 deletions src/main/java/net/vyhub/VyHubMinecraft/server/SvBans.java
Expand Up @@ -41,18 +41,20 @@ public class SvBans implements CommandExecutor {

private static Cache<Set<String>> banCache = new Cache<>(
"banned_players",
new TypeToken<HashSet<String>>() {}.getType()
new TypeToken<HashSet<String>>() {
}.getType()
);

public static void fetchMinecraftBans() {
try {
String bansJson = Files.readString(Paths.get("banned-players.json"), StandardCharsets.UTF_8);

Type minecraftBansType = new TypeToken<List<MinecraftBan>>() {}.getType();
Type minecraftBansType = new TypeToken<List<MinecraftBan>>() {
}.getType();
List<MinecraftBan> mcBansList = gson.fromJson(bansJson, minecraftBansType);
Map<String, MinecraftBan> mcBansMap = new HashMap<>();

for(MinecraftBan mcBan : mcBansList) {
for (MinecraftBan mcBan : mcBansList) {
mcBansMap.put(mcBan.getUuid(), mcBan);
}

Expand Down Expand Up @@ -89,26 +91,35 @@ private static void saveProcessedPlayers() {
banCache.save(processedPlayers);
}

public static void syncBans() {
public static synchronized void syncBans() {
fetchMinecraftBans();
fetchVyHubBans();

if (minecraftBans == null || vyhubBans == null) {
return;
}

compareAndHandleDiffs();

//Bukkit.getScheduler().runTask(VyHub.plugin, SvBans::);
}

private static synchronized void compareAndHandleDiffs() {
loadProcessedPlayers();

Set<String> bannedMinecraftPlayers = minecraftBans.keySet();

Set<String> bannedVyHubPlayers = vyhubBans.keySet();

// All minecraft bans, that do not exist on VyHub
Set<String> bannedMinecraftPlayersDiff = new HashSet<>(bannedMinecraftPlayers);
bannedMinecraftPlayersDiff.removeAll(bannedVyHubPlayers);

// All VyHub bans, that do not exist on minecraft server
Set<String> bannedVyHubPlayersDiff = new HashSet<>(bannedVyHubPlayers);
bannedVyHubPlayersDiff.removeAll(bannedMinecraftPlayers);

// All bans that minecraft server and VyHub have in common
Set<String> bannedPlayersIntersect = new HashSet<>(bannedVyHubPlayers);
bannedPlayersIntersect.retainAll(bannedMinecraftPlayers);

Expand Down Expand Up @@ -192,7 +203,7 @@ public static boolean addVyHubBan(String playerID, MinecraftBan minecraftBan) {

String vyHubAdminUserID = null;
if (!minecraftBan.getSource().equals("CONSOLE") && !minecraftBan.getSource().equals("Server")) {
try{
try {
Player sourcePlayer = Bukkit.getPlayer(UUID.fromString(minecraftBan.getSource()));

if (sourcePlayer != null) {
Expand All @@ -202,7 +213,7 @@ public static boolean addVyHubBan(String playerID, MinecraftBan minecraftBan) {
vyHubAdminUserID = admin.getId();
}
}
} catch (IllegalArgumentException ignored){
} catch (IllegalArgumentException ignored) {

}
}
Expand Down

0 comments on commit 6b9be78

Please sign in to comment.