Add build date to startup info & plugin.yml, thankyou to paid users, more information to premium jar file check and expose more buyer information for the unseen future
This commit is contained in:
parent
08dfbe3282
commit
6d64f44b15
2
pom.xml
2
pom.xml
@ -36,6 +36,8 @@
|
||||
|
||||
<properties>
|
||||
<build.number>unknown</build.number>
|
||||
<timestamp>${maven.build.timestamp}</timestamp>
|
||||
<maven.build.timestamp.format>dd/MM/yyyy HH:mm</maven.build.timestamp.format>
|
||||
<maven.compiler.source>1.8</maven.compiler.source>
|
||||
<maven.compiler.target>1.8</maven.compiler.target>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
|
@ -8,7 +8,9 @@ import me.libraryaddict.disguise.disguisetypes.DisguiseType;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.MetaIndex;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.*;
|
||||
import me.libraryaddict.disguise.utilities.*;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseSound;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
import me.libraryaddict.disguise.utilities.LibsPremium;
|
||||
import me.libraryaddict.disguise.utilities.metrics.MetricsInitalizer;
|
||||
import me.libraryaddict.disguise.utilities.packets.PacketsManager;
|
||||
import me.libraryaddict.disguise.utilities.reflection.DisguiseValues;
|
||||
@ -49,6 +51,8 @@ public class LibsDisguises extends JavaPlugin {
|
||||
|
||||
getLogger().info("Jenkins Build: " + (isNumberedBuild() ? "#" : "") + getBuildNo());
|
||||
|
||||
getLogger().info("Build Date: " + pluginYml.getString("build-date"));
|
||||
|
||||
LibsPremium.check(getDescription().getVersion());
|
||||
|
||||
if (!ReflectionManager.getMinecraftVersion().startsWith("1.13")) {
|
||||
|
@ -4,70 +4,210 @@ import me.libraryaddict.disguise.utilities.reflection.ReflectionManager;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
|
||||
import java.io.File;
|
||||
import java.lang.reflect.Method;
|
||||
import java.net.URL;
|
||||
import java.net.URLClassLoader;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* Created by libraryaddict on 2/06/2017.
|
||||
*/
|
||||
public class LibsPremium {
|
||||
private static class PluginInformation {
|
||||
private String userID;
|
||||
private boolean premium;
|
||||
private String version;
|
||||
private String buildNumber;
|
||||
private String buildDate;
|
||||
|
||||
public PluginInformation(String userID, boolean premium, String version, String buildNumber, String buildDate) {
|
||||
this.userID = userID;
|
||||
this.premium = premium;
|
||||
this.version = version;
|
||||
this.buildNumber = buildNumber;
|
||||
this.buildDate = buildDate;
|
||||
}
|
||||
|
||||
public String getUserID() {
|
||||
return userID;
|
||||
}
|
||||
|
||||
public boolean isPremium() {
|
||||
return premium;
|
||||
}
|
||||
|
||||
public String getVersion() {
|
||||
return version;
|
||||
}
|
||||
|
||||
public String getBuildNumber() {
|
||||
return buildNumber;
|
||||
}
|
||||
|
||||
public String getBuildDate() {
|
||||
return buildDate;
|
||||
}
|
||||
|
||||
public Date getParsedBuildDate() {
|
||||
try {
|
||||
return new SimpleDateFormat("dd/MM/yyyy HH:mm").parse(getBuildDate());
|
||||
}
|
||||
catch (ParseException e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static Boolean thisPluginIsPaidFor;
|
||||
|
||||
/**
|
||||
* @return Account ID if downloaded through SpigotMC
|
||||
*/
|
||||
public static String getUserID() {
|
||||
return "%%__USER__%%";
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Resource ID if downloaded through SpigotMC
|
||||
*/
|
||||
public static String getResourceID() {
|
||||
return "%%__RESOURCE__%%";
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Download ID if downloaded through SpigotMC
|
||||
*/
|
||||
public static String getDownloadID() {
|
||||
return "%%__NONCE__%%";
|
||||
}
|
||||
|
||||
/**
|
||||
* @param userID
|
||||
* @return true if userID does not contain __USER__
|
||||
*/
|
||||
private static Boolean isPremium(String userID) {
|
||||
return !userID.contains("__USER__");
|
||||
}
|
||||
|
||||
public static Boolean isPremium() {
|
||||
return thisPluginIsPaidFor == null ? !"%%__USER__%%".contains("__USER__") : thisPluginIsPaidFor;
|
||||
return thisPluginIsPaidFor == null ? !getUserID().contains("__USER__") : thisPluginIsPaidFor;
|
||||
}
|
||||
|
||||
private static PluginInformation getInformation(File file) throws Exception {
|
||||
try (URLClassLoader cl = new URLClassLoader(new URL[]{file.toURI().toURL()})) {
|
||||
Class c = cl.loadClass(LibsPremium.class.getName());
|
||||
|
||||
boolean oldJarFile = true;
|
||||
|
||||
try {
|
||||
// Error thrown if method doesn't exist
|
||||
c.getMethod("getUserID");
|
||||
// Method exists, is not older file
|
||||
oldJarFile = false;
|
||||
}
|
||||
catch (Exception ignored) {
|
||||
}
|
||||
|
||||
// Fetch the plugin.yml from the jar file
|
||||
YamlConfiguration config = ReflectionManager.getPluginYaml(cl);
|
||||
// No checks for null config as the correct error will be thrown on access
|
||||
|
||||
Boolean premium;
|
||||
String userId = null;
|
||||
|
||||
if (oldJarFile) {
|
||||
premium = (Boolean) c.getMethod("isPremium").invoke(null);
|
||||
} else {
|
||||
userId = (String) c.getMethod("getUserID").invoke(null);
|
||||
premium = isPremium(userId);
|
||||
}
|
||||
|
||||
String pluginBuildDate = "??/??/????";
|
||||
|
||||
// If plugin.yml contains a build-date
|
||||
if (config.contains("build-date")) {
|
||||
pluginBuildDate = config.getString("build-date");
|
||||
}
|
||||
|
||||
String pluginBuildNumber = "???";
|
||||
|
||||
// If plugin.yml contains a jenkins build number
|
||||
if (config.contains("build-number")) {
|
||||
pluginBuildNumber = config.getString("build-number");
|
||||
|
||||
// If build number is composed of purely numbers, prepend with # for readability
|
||||
if (pluginBuildNumber.matches("[0-9]+")) {
|
||||
pluginBuildNumber = "#" + pluginBuildNumber;
|
||||
}
|
||||
}
|
||||
|
||||
String pluginVersion = config.getString("version");
|
||||
|
||||
return new PluginInformation(userId, premium, pluginVersion, pluginBuildNumber, pluginBuildDate);
|
||||
}
|
||||
}
|
||||
|
||||
private static void doSecondaryCheck() {
|
||||
File[] files = new File("plugins/LibsDisguises/").listFiles();
|
||||
|
||||
if (files == null)
|
||||
return;
|
||||
|
||||
for (File file : files) {
|
||||
if (!file.isFile())
|
||||
continue;
|
||||
|
||||
if (!file.getName().endsWith(".jar"))
|
||||
continue;
|
||||
|
||||
PluginInformation plugin;
|
||||
|
||||
try {
|
||||
plugin = getInformation(file);
|
||||
}
|
||||
catch (ClassNotFoundException ex) {
|
||||
DisguiseUtilities.getLogger()
|
||||
.warning("Found an unrecognized jar in the LibsDisguises folder (" + file.getName() + ")");
|
||||
continue;
|
||||
}
|
||||
catch (Exception ex) {
|
||||
DisguiseUtilities.getLogger().warning("Error while trying to handle the file " + file.getName());
|
||||
ex.printStackTrace();
|
||||
continue;
|
||||
}
|
||||
|
||||
// Format into a string
|
||||
// v5.2.6, build #40, created 16/02/2019
|
||||
String fileInfo = String.format("v%s, build %s, created %s", plugin.getVersion(), plugin.getBuildNumber(),
|
||||
plugin.getBuildDate());
|
||||
|
||||
if (plugin.isPremium()) {
|
||||
thisPluginIsPaidFor = true;
|
||||
// Found a premium Lib's Disguises jar (v5.2.6, build #40, created 16/02/2019)
|
||||
DisguiseUtilities.getLogger()
|
||||
.info("Found a premium Lib's Disguises jar (" + fileInfo + ")");
|
||||
|
||||
break;
|
||||
} else {
|
||||
// You have a non-premium Lib's Disguises jar (LibsDisguises.jar v5.2.6, build #40, created
|
||||
// 16/02/2019) in the LibsDisguises folder!
|
||||
DisguiseUtilities.getLogger().warning(
|
||||
"You have a non-premium Lib's Disguises jar (" + file.getName() + " " + fileInfo +
|
||||
") in the LibsDisguises folder!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void check(String version) {
|
||||
thisPluginIsPaidFor = isPremium();
|
||||
|
||||
if (!isPremium()) {
|
||||
File[] files = new File("plugins/LibsDisguises/").listFiles();
|
||||
doSecondaryCheck();
|
||||
}
|
||||
|
||||
if (files == null)
|
||||
return;
|
||||
|
||||
for (File file : files) {
|
||||
if (!file.isFile())
|
||||
continue;
|
||||
|
||||
if (!file.getName().endsWith(".jar"))
|
||||
continue;
|
||||
|
||||
try (URLClassLoader cl = new URLClassLoader(new URL[]{file.toURI().toURL()})) {
|
||||
Class c = cl.loadClass(LibsPremium.class.getName());
|
||||
|
||||
Method m = c.getMethod("isPremium");
|
||||
thisPluginIsPaidFor = (Boolean) m.invoke(null);
|
||||
String pluginVersion;
|
||||
|
||||
YamlConfiguration config = ReflectionManager.getPluginYaml(cl);
|
||||
|
||||
pluginVersion = config.getString("version");
|
||||
|
||||
if (isPremium()) {
|
||||
// Found a premium Lib's Disguises jar (v5.2.6), premium enabled!
|
||||
DisguiseUtilities.getLogger()
|
||||
.info("Found a premium Lib's Disguises jar (v" + pluginVersion + "), premium enabled!");
|
||||
|
||||
break;
|
||||
} else {
|
||||
// You have a non-premium Lib's Disguises jar (LibsDisguises.jar v5.2.6) in the folder!
|
||||
DisguiseUtilities.getLogger().warning(
|
||||
"You have a non-premium Lib's Disguises jar (" + file.getName() + " v" + pluginVersion +
|
||||
") in the folder!");
|
||||
}
|
||||
}
|
||||
catch (ClassNotFoundException ex) {
|
||||
DisguiseUtilities.getLogger()
|
||||
.warning("Found an unrecognized jar in the LibsDisguises folder (" + file.getName() + ")");
|
||||
}
|
||||
catch (Exception ex) {
|
||||
DisguiseUtilities.getLogger().warning("Error while trying to handle the file " + file.getName());
|
||||
ex.printStackTrace();
|
||||
// Don't print off errors
|
||||
}
|
||||
}
|
||||
if (isPremium()) {
|
||||
DisguiseUtilities.getLogger().info("Premium enabled, thank you for supporting Lib's Disguises!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ name: LibsDisguises
|
||||
main: me.libraryaddict.disguise.LibsDisguises
|
||||
description: A disguise plugin with various disguises.
|
||||
version: ${project.version}
|
||||
build-date: ${timestamp}
|
||||
build-number: ${build.number}
|
||||
author: libraryaddict
|
||||
authors: [Byteflux, Navid K.]
|
||||
|
Loading…
Reference in New Issue
Block a user