Skip to content

Commit

Permalink
Merge pull request #8 from MineTrax/v3.0.0
Browse files Browse the repository at this point in the history
V3.0.0
  • Loading branch information
Xinecraft authored Sep 2, 2023
2 parents e059a97 + cb3c7e2 commit d6bc752
Show file tree
Hide file tree
Showing 25 changed files with 866 additions and 124 deletions.
18 changes: 14 additions & 4 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>Minetrax</groupId>
<artifactId>Minetrax</artifactId>
<version>2.0.0</version>
<version>3.0.0</version>
<packaging>jar</packaging>

<name>Minetrax</name>
Expand Down Expand Up @@ -85,6 +85,10 @@
<id>placeholderapi</id>
<url>https://repo.extendedclip.com/content/repositories/placeholderapi/</url>
</repository>
<repository>
<id>viaversion-repo</id>
<url>https://repo.viaversion.com</url>
</repository>
</repositories>

<dependencies>
Expand All @@ -103,7 +107,7 @@
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot</artifactId>
<version>1.18.1-R0.1-SNAPSHOT</version>
<version>1.18.2-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
Expand All @@ -123,14 +127,14 @@
<artifactId>venturechat</artifactId>
<version>2.23.2</version>
<scope>system</scope>
<systemPath>C:/Users/Asus/Desktop/MineTrax/Plugin Development/Plugins/VentureChat-2.23.2.jar</systemPath>
<systemPath>C:/Users/zisha/Desktop/Wurky/MineTrax/Plugin Development/Plugins/VentureChat-2.23.2.jar</systemPath>
</dependency>
<dependency>
<groupId>io.signality</groupId>
<artifactId>EpicCore</artifactId>
<version>1.6</version>
<scope>system</scope>
<systemPath>C:/Users/Asus/Desktop/MineTrax/Plugin Development/Plugins/EpicCore-1.6.jar</systemPath>
<systemPath>C:/Users/zisha/Desktop/Wurky/MineTrax/Plugin Development/Plugins/EpicCore-1.6.jar</systemPath>
</dependency>
<dependency>
<groupId>org.jetbrains</groupId>
Expand All @@ -155,5 +159,11 @@
<version>2.11.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.viaversion</groupId>
<artifactId>viaversion-api</artifactId>
<version>4.7.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
97 changes: 89 additions & 8 deletions src/main/java/com/xinecraft/Minetrax.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package com.xinecraft;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.xinecraft.adapters.ItemStackGsonAdapter;
import com.xinecraft.commands.AccountLinkCommand;
import com.xinecraft.commands.PlayerWhoisCommand;
import com.xinecraft.commands.WebSayCommand;
Expand All @@ -17,15 +20,18 @@
import com.xinecraft.tasks.ServerIntelReportTask;
import com.xinecraft.threads.ConsoleMessageQueueWorker;
import com.xinecraft.threads.webquery.NettyWebQueryServer;
import com.xinecraft.utils.PlayerIntelUtil;
import com.xinecraft.utils.PluginUtil;
import com.xinecraft.utils.UpdateChecker;
import lombok.Getter;
import net.milkbowl.vault.economy.Economy;
import net.milkbowl.vault.permission.Permission;
import org.apache.commons.lang.StringUtils;
import org.bstats.bukkit.Metrics;
import org.bukkit.Bukkit;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.java.JavaPlugin;

Expand Down Expand Up @@ -104,6 +110,16 @@ public final class Minetrax extends JavaPlugin implements Listener {
@Getter
private List<String> remindPlayerToLinkMessage;
@Getter
private List<String> playerLinkInitMessage;
@Getter
private List<String> playerLinkNotFoundMessage;
@Getter
private List<String> playerLinkAlreadyLinkedMessage;
@Getter
private List<String> playerLinkUnknownErrorMessage;
@Getter
private List<String> playerLinkFinalActionMessage;
@Getter
private long afkThresholdInMs;
@Getter
public HashMap<String, PlayerData> playersDataMap;
Expand All @@ -114,20 +130,35 @@ public final class Minetrax extends JavaPlugin implements Listener {
@Getter
public Boolean isAllowOnlyWhitelistedCommandsFromWeb;
@Getter
public Boolean isSendInventoryDataToPlayerIntel;
@Getter
public List<String> whitelistedCommandsFromWeb;
@Getter
public HashMap<String, String> joinAddressCache = new HashMap<String, String>();
@Getter
public boolean hasViaVersion;
@Getter
public Gson gson = null;

private static Permission perms = null;
private static Economy economy = null;

public static Minetrax getPlugin() {
return getPlugin(Minetrax.class);
}

@Override
public void onEnable()
{
public void onEnable() {
// Plugin startup logic
getLogger().info("Minetrax Plugin Enabled!");

// Gson Builder
gson = new GsonBuilder()
.registerTypeHierarchyAdapter(ItemStack.class, new ItemStackGsonAdapter())
.serializeNulls()
.disableHtmlEscaping()
.create();

// bStats Metric
int pluginId = 15485;
Metrics metrics = new Metrics(this, pluginId);
Expand Down Expand Up @@ -173,12 +204,18 @@ public void onEnable()
isPlayerIntelEnabled = this.getConfig().getBoolean("report-player-intel");
remindPlayerToLinkInterval = this.getConfig().getLong("remind-player-interval");
remindPlayerToLinkMessage = this.getConfig().getStringList("remind-player-link-message");
playerLinkInitMessage = this.getConfig().getStringList("player-link-init-message");
playerLinkNotFoundMessage = this.getConfig().getStringList("player-link-not-found-message");
playerLinkAlreadyLinkedMessage = this.getConfig().getStringList("player-link-already-linked-message");
playerLinkUnknownErrorMessage = this.getConfig().getStringList("player-link-unknown-error-message");
playerLinkFinalActionMessage = this.getConfig().getStringList("player-link-final-action-message");
afkThresholdInMs = this.getConfig().getLong("afk-threshold-in-seconds", 300) * 1000;
isFireworkOnPlayerJoin = this.getConfig().getBoolean("enable-firework-on-player-join");
isFireworkOnPlayerFirstJoin = this.getConfig().getBoolean("enable-firework-on-player-first-join");
fireworkSendAmount = this.getConfig().getString("join-fireworks-amount");
isAllowOnlyWhitelistedCommandsFromWeb = this.getConfig().getBoolean("allow-only-whitelisted-commands-from-web");
whitelistedCommandsFromWeb = this.getConfig().getStringList("whitelisted-commands-from-web");
isSendInventoryDataToPlayerIntel = this.getConfig().getBoolean("send-inventory-data-to-player-intel");
serverSessionId = UUID.randomUUID().toString();

// Disable plugin if host, key, secret or server-id is not there
Expand Down Expand Up @@ -212,6 +249,14 @@ public void onEnable()
getServer().getPluginManager().registerEvents(new PlayerItemConsumeListener(), this);
getServer().getPluginManager().registerEvents(new PlayerMoveListener(), this);
getServer().getPluginManager().registerEvents(new PlayerCommandListener(), this);
getServer().getPluginManager().registerEvents(new CraftItemListener(), this);
getServer().getPluginManager().registerEvents(new EnchantItemListener(), this);
getServer().getPluginManager().registerEvents(new FishCatchListener(), this);
getServer().getPluginManager().registerEvents(new PlayerBedEnterListener(), this);
getServer().getPluginManager().registerEvents(new ProjectileLaunchListener(), this);
getServer().getPluginManager().registerEvents(new RaidFinishListener(), this);
getServer().getPluginManager().registerEvents(new PlayerDamageListener(), this);
getServer().getPluginManager().registerEvents(new PlayerLoginListener(), this);

// Register Listeners only required for ChatLogs
if (isChatLogEnabled) {
Expand Down Expand Up @@ -253,45 +298,77 @@ public void onEnable()
} else {
getLogger().info("Vault Permission Plugin: " + perms.getName());
}
boolean hasVaultEconomy = setupVaultEconomy();
if (!hasVaultEconomy) {
getLogger().info("No Vault supported economy plugin found.");
} else {
getLogger().info("Vault Economy Plugin: " + economy.getName());
}

// Setup Schedulers
if (isRemindPlayerToLinkEnabled) {
getServer().getScheduler().scheduleSyncRepeatingTask(this, new AccountLinkReminderTask(), 20 * 20, remindPlayerToLinkInterval * 20L);
}
if (isServerIntelEnabled) {
getServer().getScheduler().runTaskTimerAsynchronously(this, new ServerIntelReportTask(), 60 * 20L, 60 * 20L); // every minute
getServer().getScheduler().runTaskTimerAsynchronously(this, new ServerIntelReportTask(), 60 * 20L, 60 * 20L); // every minute
}
if (isPlayerIntelEnabled) {
getServer().getScheduler().runTaskTimerAsynchronously(this, new PlayerIntelReportTask(), 5 * 60 * 20L, 5 * 60 * 20L); // every 5 minutes
}

getServer().getScheduler().runTaskTimerAsynchronously(this, new PlayerAfkAndWorldIntelTrackerTask(), 20L, 20L); // Run every seconds

// Setup PlaceholderAPI
if(Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) {
if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) {
getLogger().info("Hooking into PlaceholderAPI.");
new MinetraxPlaceholderExpansion(this).register();
}

// Check if ViaVersion is installed
if (PluginUtil.checkIfPluginEnabled("ViaVersion")) {
getLogger().info("ViaVersion is found! Will use it to get player version.");
hasViaVersion = true;
}

// Update Checker
checkForPluginUpdates();
}

@Override
public void onDisable()
{
public void onDisable() {
// Plugin shutdown logic
getLogger().info("Minetrax Plugin Disabled!");
HandlerList.unregisterAll();
webQuerySocketServer.shutdown();
if (webQuerySocketServer != null) {
webQuerySocketServer.shutdown();
}

if (isPlayerIntelEnabled) {
getLogger().info("Please wait.. Reporting all pending PlayerIntel");
for (PlayerSessionIntelData playerSessionData : playerSessionIntelDataMap.values()) {
PlayerIntelUtil.reportPlayerIntel(playerSessionData, true);
}
}
}

private boolean setupVaultPermission() {
RegisteredServiceProvider<Permission> rsp = getServer().getServicesManager().getRegistration(Permission.class);
if (rsp == null) {
return false;
}
perms = rsp.getProvider();
return perms != null;
}

private boolean setupVaultEconomy() {
RegisteredServiceProvider<Economy> rsp = getServer().getServicesManager().getRegistration(Economy.class);
if (rsp == null) {
return false;
}
economy = rsp.getProvider();
return economy != null;
}

private void checkForPluginUpdates() {
new UpdateChecker(this, 102635).getVersion(version -> {
if (this.getDescription().getVersion().equalsIgnoreCase(version)) {
Expand All @@ -305,4 +382,8 @@ private void checkForPluginUpdates() {
public static Permission getVaultPermission() {
return perms;
}

public static Economy getVaultEconomy() {
return economy;
}
}
28 changes: 28 additions & 0 deletions src/main/java/com/xinecraft/adapters/ItemStackGsonAdapter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.xinecraft.adapters;

import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import org.bukkit.inventory.ItemStack;

import java.lang.reflect.Type;
import java.util.Map;

public class ItemStackGsonAdapter implements JsonSerializer<ItemStack> {
@Override
public JsonElement serialize(ItemStack itemStack, Type type, JsonSerializationContext context) {
if (itemStack == null) {
return null;
}

JsonObject jsonItem = new JsonObject();

Map<String, Object> itemJson = itemStack.serialize();
for (Map.Entry<String, Object> entry : itemJson.entrySet()) {
jsonItem.addProperty(entry.getKey(), entry.getValue().toString());
}

return jsonItem;
}
}
43 changes: 34 additions & 9 deletions src/main/java/com/xinecraft/commands/AccountLinkCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,13 @@ public boolean onCommand(CommandSender commandSender, Command command, String s,

Player player = (Player) commandSender;

player.sendMessage(ChatColor.GRAY + "Please wait.. Account verification is instantiating.");
// Send Init message
for (String line : Minetrax.getPlugin().getPlayerLinkInitMessage()) {
line = line.replace("{WEB_URL}", Minetrax.getPlugin().getApiHost());
line = ChatColor.translateAlternateColorCodes('&', line);
player.sendMessage(line);
}

// Hit the API
Map<String, String> params = new HashMap<String, String>();
params.put("api_key", Minetrax.getPlugin().getApiKey());
Expand All @@ -48,31 +54,50 @@ public void run() {

// If player not found
if (errorType.equals("not-found")) {
player.sendMessage(ChatColor.RED + "404! Player not in website database yet.");
player.sendMessage(ChatColor.YELLOW + "Please try again after an hour");
for (String line : Minetrax.getPlugin().getPlayerLinkNotFoundMessage()) {
line = line.replace("{WEB_URL}", Minetrax.getPlugin().getApiHost());
line = ChatColor.translateAlternateColorCodes('&', line);
player.sendMessage(line);
}
}

// If already linked
else if(errorType.equals("player-already-linked")) {
player.sendMessage(ChatColor.YELLOW + "Hey! This player is already linked. Plz visit " + ChatColor.UNDERLINE + Minetrax.getPlugin().getApiHost() + ChatColor.RESET + ChatColor.YELLOW + " to know more.");
else if (errorType.equals("player-already-linked")) {
for (String line : Minetrax.getPlugin().getPlayerLinkAlreadyLinkedMessage()) {
line = line.replace("{WEB_URL}", Minetrax.getPlugin().getApiHost());
line = ChatColor.translateAlternateColorCodes('&', line);
player.sendMessage(line);
}
}

// Unknown error
else {
player.sendMessage(ChatColor.RED + "Some unknown error occurred. Please try again after some time.");
for (String line : Minetrax.getPlugin().getPlayerLinkUnknownErrorMessage()) {
line = line.replace("{WEB_URL}", Minetrax.getPlugin().getApiHost());
line = ChatColor.translateAlternateColorCodes('&', line);
player.sendMessage(line);
}
}
return;
}

// Return the URL to user to click
if (responseObj.get("status").getAsString().equals("success")) {
String url = responseObj.get("data").getAsString();
player.sendMessage(ChatColor.GREEN + "Please open the below link to start your linking process");
player.sendMessage(url);
for (String line : Minetrax.getPlugin().getPlayerLinkFinalActionMessage()) {
line = line.replace("{WEB_URL}", Minetrax.getPlugin().getApiHost());
line = line.replace("{LINK_URL}", url);
line = ChatColor.translateAlternateColorCodes('&', line);
player.sendMessage(line);
}
}
} catch (Exception e) {
// Tell user something error happen
player.sendMessage(ChatColor.RED + "Some unknown error occurred. Please try again after some time.");
for (String line : Minetrax.getPlugin().getPlayerLinkUnknownErrorMessage()) {
line = line.replace("{WEB_URL}", Minetrax.getPlugin().getApiHost());
line = ChatColor.translateAlternateColorCodes('&', line);
player.sendMessage(line);
}
}
}
});
Expand Down
Loading

0 comments on commit d6bc752

Please sign in to comment.