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>
|
<properties>
|
||||||
<build.number>unknown</build.number>
|
<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.source>1.8</maven.compiler.source>
|
||||||
<maven.compiler.target>1.8</maven.compiler.target>
|
<maven.compiler.target>1.8</maven.compiler.target>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<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.FlagWatcher;
|
||||||
import me.libraryaddict.disguise.disguisetypes.MetaIndex;
|
import me.libraryaddict.disguise.disguisetypes.MetaIndex;
|
||||||
import me.libraryaddict.disguise.disguisetypes.watchers.*;
|
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.metrics.MetricsInitalizer;
|
||||||
import me.libraryaddict.disguise.utilities.packets.PacketsManager;
|
import me.libraryaddict.disguise.utilities.packets.PacketsManager;
|
||||||
import me.libraryaddict.disguise.utilities.reflection.DisguiseValues;
|
import me.libraryaddict.disguise.utilities.reflection.DisguiseValues;
|
||||||
@ -49,6 +51,8 @@ public class LibsDisguises extends JavaPlugin {
|
|||||||
|
|
||||||
getLogger().info("Jenkins Build: " + (isNumberedBuild() ? "#" : "") + getBuildNo());
|
getLogger().info("Jenkins Build: " + (isNumberedBuild() ? "#" : "") + getBuildNo());
|
||||||
|
|
||||||
|
getLogger().info("Build Date: " + pluginYml.getString("build-date"));
|
||||||
|
|
||||||
LibsPremium.check(getDescription().getVersion());
|
LibsPremium.check(getDescription().getVersion());
|
||||||
|
|
||||||
if (!ReflectionManager.getMinecraftVersion().startsWith("1.13")) {
|
if (!ReflectionManager.getMinecraftVersion().startsWith("1.13")) {
|
||||||
|
@ -4,24 +4,151 @@ import me.libraryaddict.disguise.utilities.reflection.ReflectionManager;
|
|||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.net.URLClassLoader;
|
import java.net.URLClassLoader;
|
||||||
|
import java.text.ParseException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by libraryaddict on 2/06/2017.
|
* Created by libraryaddict on 2/06/2017.
|
||||||
*/
|
*/
|
||||||
public class LibsPremium {
|
public class LibsPremium {
|
||||||
private static Boolean thisPluginIsPaidFor;
|
private static class PluginInformation {
|
||||||
|
private String userID;
|
||||||
|
private boolean premium;
|
||||||
|
private String version;
|
||||||
|
private String buildNumber;
|
||||||
|
private String buildDate;
|
||||||
|
|
||||||
public static Boolean isPremium() {
|
public PluginInformation(String userID, boolean premium, String version, String buildNumber, String buildDate) {
|
||||||
return thisPluginIsPaidFor == null ? !"%%__USER__%%".contains("__USER__") : thisPluginIsPaidFor;
|
this.userID = userID;
|
||||||
|
this.premium = premium;
|
||||||
|
this.version = version;
|
||||||
|
this.buildNumber = buildNumber;
|
||||||
|
this.buildDate = buildDate;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void check(String version) {
|
public String getUserID() {
|
||||||
thisPluginIsPaidFor = isPremium();
|
return userID;
|
||||||
|
}
|
||||||
|
|
||||||
if (!isPremium()) {
|
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 ? !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();
|
File[] files = new File("plugins/LibsDisguises/").listFiles();
|
||||||
|
|
||||||
if (files == null)
|
if (files == null)
|
||||||
@ -34,40 +161,53 @@ public class LibsPremium {
|
|||||||
if (!file.getName().endsWith(".jar"))
|
if (!file.getName().endsWith(".jar"))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
try (URLClassLoader cl = new URLClassLoader(new URL[]{file.toURI().toURL()})) {
|
PluginInformation plugin;
|
||||||
Class c = cl.loadClass(LibsPremium.class.getName());
|
|
||||||
|
|
||||||
Method m = c.getMethod("isPremium");
|
try {
|
||||||
thisPluginIsPaidFor = (Boolean) m.invoke(null);
|
plugin = getInformation(file);
|
||||||
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) {
|
catch (ClassNotFoundException ex) {
|
||||||
DisguiseUtilities.getLogger()
|
DisguiseUtilities.getLogger()
|
||||||
.warning("Found an unrecognized jar in the LibsDisguises folder (" + file.getName() + ")");
|
.warning("Found an unrecognized jar in the LibsDisguises folder (" + file.getName() + ")");
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
catch (Exception ex) {
|
catch (Exception ex) {
|
||||||
DisguiseUtilities.getLogger().warning("Error while trying to handle the file " + file.getName());
|
DisguiseUtilities.getLogger().warning("Error while trying to handle the file " + file.getName());
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
// Don't print off errors
|
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()) {
|
||||||
|
doSecondaryCheck();
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
main: me.libraryaddict.disguise.LibsDisguises
|
||||||
description: A disguise plugin with various disguises.
|
description: A disguise plugin with various disguises.
|
||||||
version: ${project.version}
|
version: ${project.version}
|
||||||
|
build-date: ${timestamp}
|
||||||
build-number: ${build.number}
|
build-number: ${build.number}
|
||||||
author: libraryaddict
|
author: libraryaddict
|
||||||
authors: [Byteflux, Navid K.]
|
authors: [Byteflux, Navid K.]
|
||||||
|
Loading…
Reference in New Issue
Block a user