diff --git a/README.md b/README.md
index d037fb0..2b98127 100644
--- a/README.md
+++ b/README.md
@@ -14,6 +14,13 @@ Java:
![image](https://user-images.githubusercontent.com/5401186/80527741-c1519f00-898c-11ea-8b0a-999b455b77af.png)
+## Download
+You can download the plugin/extension from GitHub releases or eCloud
+
+https://api.extendedclip.com/expansions/floodgate/ or `/papi ecloud download Floodgate` ingame
+
+https://github.com/rtm516/FloodgatePlaceholders/releases/
+
## Placeholders:
- Device:
- `%floodgate_device%`
diff --git a/pom.xml b/pom.xml
index 1737d99..43be5f7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
com.rtm516
FloodgatePlaceholders
- 1.2.1
+ 1.3.0
FloodgatePlaceholders
@@ -50,6 +50,54 @@
+
+ com.google.code.maven-replacer-plugin
+ replacer
+ 1.5.3
+
+
+ add-version
+ process-sources
+
+ replace
+
+
+
+ ${project.basedir}/src/main/java/com/rtm516/FloodgatePlaceholders/Placeholder.java
+
+
+
+ String VERSION = ".*"
+ String VERSION = "${project.version}"
+
+
+ String NAME = ".*"
+ String NAME = "${project.name}"
+
+
+
+
+
+
+ remove-version
+ process-classes
+
+ replace
+
+
+
+ ${project.basedir}/src/main/java/com/rtm516/FloodgatePlaceholders/Placeholder.java
+
+
+
+ String VERSION = ".*"
+ String VERSION = "DEV"
+
+
+
+
+
+
diff --git a/src/main/java/com/rtm516/FloodgatePlaceholders/Config.java b/src/main/java/com/rtm516/FloodgatePlaceholders/Config.java
index a7a3dae..c6168c7 100644
--- a/src/main/java/com/rtm516/FloodgatePlaceholders/Config.java
+++ b/src/main/java/com/rtm516/FloodgatePlaceholders/Config.java
@@ -1,111 +1,53 @@
package com.rtm516.FloodgatePlaceholders;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
-import lombok.Getter;
+public interface Config {
+ boolean isSpecificDeviceDescriptors();
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.util.logging.Level;
-import java.util.logging.Logger;
+ DevicePlaceholders getDevice();
-@Getter
-public class Config {
- @JsonProperty(value = "specific-device-descriptors")
- private boolean specificDeviceDescriptors;
+ GenericPlaceholders getLocale();
- @JsonProperty(value = "device")
- private DevicePlaceholders device;
+ GenericPlaceholders getVersion();
- @JsonProperty(value = "locale")
- private GenericPlaceholders locale;
+ GenericPlaceholders getXboxUsername();
- @JsonProperty(value = "version")
- private GenericPlaceholders version;
+ GenericPlaceholders getXboxXuid();
- @JsonProperty(value = "xbox-username")
- private GenericPlaceholders xboxUsername;
+ interface DevicePlaceholders {
+ String getJava();
- @JsonProperty(value = "xbox-xuid")
- private GenericPlaceholders xboxXuid;
+ String getGeneric();
- @Getter
- public static class DevicePlaceholders {
- @JsonProperty("java")
- private String java;
+ String getUnknown();
- @JsonProperty("generic")
- private String generic;
+ String getGoogle();
- @JsonProperty("unknown")
- private String unknown;
+ String getIOS();
- @JsonProperty("google")
- private String google;
+ String getOSX();
- @JsonProperty("ios")
- private String iOS;
+ String getAmazon();
- @JsonProperty("osx")
- private String OSX;
+ String getGearVR();
- @JsonProperty("amazon")
- private String amazon;
+ String getHololens();
- @JsonProperty("gearvr")
- private String gearVR;
+ String getUwp();
- @JsonProperty("hololens")
- private String hololens;
+ String getWin32();
- @JsonProperty("uwp")
- private String uwp;
+ String getDedicated();
- @JsonProperty("win32")
- private String win32;
+ String getPs4();
- @JsonProperty("dedicated")
- private String dedicated;
+ String getNX();
- @JsonProperty("ps4")
- private String ps4;
-
- @JsonProperty("nx")
- private String NX;
-
- @JsonProperty("xbox")
- private String xbox;
+ String getXbox();
}
- @Getter
- public static class GenericPlaceholders {
- @JsonProperty("found")
- private String found;
-
- @JsonProperty("none")
- private String none;
- }
+ interface GenericPlaceholders {
+ String getFound();
- public static Config load(Logger logger, Path configPath) {
- Config config = null;
- try {
- try {
- if (!configPath.toFile().exists())
- Files.copy(Config.class.getClassLoader().getResourceAsStream("config.yml"), configPath);
- } catch (Exception e) {
- logger.log(Level.SEVERE, "Error while creating config.yml", e);
- }
-
- config = new ObjectMapper(new YAMLFactory()).readValue(Files.readAllBytes(configPath), Config.class);
- } catch (Exception e) {
- logger.log(Level.SEVERE, "Error while loading config.yml", e);
- }
-
- if (config == null) {
- throw new RuntimeException("Failed to load config file! Try to delete the data folder of FloodgatePlaceholders");
- }
-
- return config;
+ String getNone();
}
}
diff --git a/src/main/java/com/rtm516/FloodgatePlaceholders/ExpansionConfig.java b/src/main/java/com/rtm516/FloodgatePlaceholders/ExpansionConfig.java
new file mode 100644
index 0000000..83d29ba
--- /dev/null
+++ b/src/main/java/com/rtm516/FloodgatePlaceholders/ExpansionConfig.java
@@ -0,0 +1,146 @@
+package com.rtm516.FloodgatePlaceholders;
+
+public class ExpansionConfig implements Config {
+ private Placeholder expansion;
+
+ public ExpansionConfig(Placeholder expansion) {
+ this.expansion = expansion;
+ }
+
+ @Override
+ public boolean isSpecificDeviceDescriptors() {
+ return (Boolean) expansion.get("specific-device-descriptors", true);
+ }
+
+ @Override
+ public DevicePlaceholders getDevice() {
+ return new ExpansionDevicePlaceholders(this, "device");
+ }
+
+ @Override
+ public GenericPlaceholders getLocale() {
+ return new ExpansionGenericPlaceholders(this, "locale");
+ }
+
+ @Override
+ public GenericPlaceholders getVersion() {
+ return new ExpansionGenericPlaceholders(this, "version");
+ }
+
+ @Override
+ public GenericPlaceholders getXboxUsername() {
+ return new ExpansionGenericPlaceholders(this, "xbox-username");
+ }
+
+ @Override
+ public GenericPlaceholders getXboxXuid() {
+ return new ExpansionGenericPlaceholders(this, "xbox-xuid");
+ }
+
+ private class ExpansionDevicePlaceholders implements DevicePlaceholders {
+
+ private final ExpansionConfig config;
+ private final String parent;
+
+ public ExpansionDevicePlaceholders(ExpansionConfig config, String parent) {
+ this.config = config;
+ this.parent = parent;
+ }
+
+ @Override
+ public String getJava() {
+ return config.expansion.getString(parent + ".java", "");
+ }
+
+ @Override
+ public String getGeneric() {
+ return config.expansion.getString(parent + ".generic", "");
+ }
+
+ @Override
+ public String getUnknown() {
+ return config.expansion.getString(parent + ".unknown", "");
+ }
+
+ @Override
+ public String getGoogle() {
+ return config.expansion.getString(parent + ".google", "");
+ }
+
+ @Override
+ public String getIOS() {
+ return config.expansion.getString(parent + ".ios", "");
+ }
+
+ @Override
+ public String getOSX() {
+ return config.expansion.getString(parent + ".osx", "");
+ }
+
+ @Override
+ public String getAmazon() {
+ return config.expansion.getString(parent + ".fireos", "");
+ }
+
+ @Override
+ public String getGearVR() {
+ return config.expansion.getString(parent + ".gearvr", "");
+ }
+
+ @Override
+ public String getHololens() {
+ return config.expansion.getString(parent + ".hololens", "");
+ }
+
+ @Override
+ public String getUwp() {
+ return config.expansion.getString(parent + ".uwp", "");
+ }
+
+ @Override
+ public String getWin32() {
+ return config.expansion.getString(parent + ".win32", "");
+ }
+
+ @Override
+ public String getDedicated() {
+ return config.expansion.getString(parent + ".dedicated", "");
+ }
+
+ @Override
+ public String getPs4() {
+ return config.expansion.getString(parent + ".ps4", "");
+ }
+
+ @Override
+ public String getNX() {
+ return config.expansion.getString(parent + ".nx", "");
+ }
+
+ @Override
+ public String getXbox() {
+ return config.expansion.getString(parent + ".xbox", "");
+ }
+ }
+
+ private static class ExpansionGenericPlaceholders implements GenericPlaceholders {
+
+ private final ExpansionConfig config;
+ private final String parent;
+
+ public ExpansionGenericPlaceholders(ExpansionConfig config, String parent) {
+ this.config = config;
+ this.parent = parent;
+ }
+
+ @Override
+ public String getFound() {
+ return config.expansion.getString(parent + ".found", "");
+ }
+
+ @Override
+ public String getNone() {
+ return config.expansion.getString(parent + ".none", "");
+ }
+ }
+}
diff --git a/src/main/java/com/rtm516/FloodgatePlaceholders/Main.java b/src/main/java/com/rtm516/FloodgatePlaceholders/Main.java
index e1c9dc1..1aec79d 100644
--- a/src/main/java/com/rtm516/FloodgatePlaceholders/Main.java
+++ b/src/main/java/com/rtm516/FloodgatePlaceholders/Main.java
@@ -6,8 +6,11 @@
public class Main extends JavaPlugin {
+ public static final String NAME = "FloodgatePlaceholders";
+ public static final String VERSION = "DEV";
+
@Getter
- private Config configuration;
+ private PluginConfig configuration;
@Override
public void onLoad() {
@@ -15,7 +18,7 @@ public void onLoad() {
getDataFolder().mkdir();
}
- configuration = Config.load(getLogger(), getDataFolder().toPath().resolve("config.yml"));
+ configuration = PluginConfig.load(getLogger(), getDataFolder().toPath().resolve("config.yml"));
}
@Override
@@ -23,7 +26,7 @@ public void onEnable() {
saveDefaultConfig();
if (Bukkit.getPluginManager().getPlugin("floodgate") != null && Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) {
- new Placeholder(this).register();
+ new Placeholder(getConfiguration()).register();
} else {
getLogger().warning("Floodgate 2.0 or PlaceholderAPI not found! Disabling plugin.");
getServer().getPluginManager().disablePlugin(this);
diff --git a/src/main/java/com/rtm516/FloodgatePlaceholders/Placeholder.java b/src/main/java/com/rtm516/FloodgatePlaceholders/Placeholder.java
index d8502a4..b43d34c 100644
--- a/src/main/java/com/rtm516/FloodgatePlaceholders/Placeholder.java
+++ b/src/main/java/com/rtm516/FloodgatePlaceholders/Placeholder.java
@@ -1,16 +1,25 @@
package com.rtm516.FloodgatePlaceholders;
+import me.clip.placeholderapi.expansion.Configurable;
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
+import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.geysermc.floodgate.api.FloodgateApi;
import org.geysermc.floodgate.api.player.FloodgatePlayer;
-public class Placeholder extends PlaceholderExpansion {
+import java.util.HashMap;
+import java.util.Map;
- private Main plugin;
+public class Placeholder extends PlaceholderExpansion implements Configurable {
- public Placeholder(Main plugin){
- this.plugin = plugin;
+ private Config config;
+
+ public Placeholder() {
+ config = new ExpansionConfig(this);
+ }
+
+ public Placeholder(Config config){
+ this.config = config;
}
@Override
@@ -20,12 +29,17 @@ public boolean persist(){
@Override
public boolean canRegister(){
- return true;
+ return Bukkit.getPluginManager().isPluginEnabled(getRequiredPlugin());
+ }
+
+ @Override
+ public String getRequiredPlugin() {
+ return "floodgate";
}
@Override
public String getAuthor(){
- return plugin.getDescription().getAuthors().toString();
+ return "rtm516";
}
@Override
@@ -35,7 +49,7 @@ public String getIdentifier(){
@Override
public String getVersion(){
- return plugin.getDescription().getVersion();
+ return Main.VERSION;
}
@Override
@@ -54,30 +68,30 @@ public String onPlaceholderRequest(Player player, String identifier) {
case "locale_upper":
if (floodgatePlayer != null) {
boolean upper = identifier.endsWith("_upper");
- return plugin.getConfiguration().getLocale().getFound().replace("%locale%", upper ? floodgatePlayer.getLanguageCode().toUpperCase() : floodgatePlayer.getLanguageCode().toLowerCase());
+ return config.getLocale().getFound().replace("%locale%", upper ? floodgatePlayer.getLanguageCode().toUpperCase() : floodgatePlayer.getLanguageCode().toLowerCase());
} else {
- return plugin.getConfiguration().getLocale().getNone();
+ return config.getLocale().getNone();
}
case "version":
if (floodgatePlayer != null) {
- return plugin.getConfiguration().getVersion().getFound().replace("%version%", floodgatePlayer.getVersion());
+ return config.getVersion().getFound().replace("%version%", floodgatePlayer.getVersion());
} else {
- return plugin.getConfiguration().getVersion().getNone();
+ return config.getVersion().getNone();
}
case "username":
if (floodgatePlayer != null) {
- return plugin.getConfiguration().getXboxUsername().getFound().replace("%username%", floodgatePlayer.getUsername());
+ return config.getXboxUsername().getFound().replace("%username%", floodgatePlayer.getUsername());
} else {
- return plugin.getConfiguration().getXboxUsername().getNone();
+ return config.getXboxUsername().getNone();
}
case "xuid":
if (floodgatePlayer != null) {
- return plugin.getConfiguration().getXboxXuid().getFound().replace("%xuid%", floodgatePlayer.getXuid());
+ return config.getXboxXuid().getFound().replace("%xuid%", floodgatePlayer.getXuid());
} else {
- return plugin.getConfiguration().getXboxXuid().getNone();
+ return config.getXboxXuid().getNone();
}
}
@@ -93,41 +107,73 @@ public String onPlaceholderRequest(Player player, String identifier) {
private String getPlayerDeviceString(Player player) {
FloodgatePlayer floodgatePlayer = FloodgateApi.getInstance().getPlayer(player.getUniqueId());
if (floodgatePlayer != null) {
- if (plugin.getConfiguration().isSpecificDeviceDescriptors()) {
+ if (config.isSpecificDeviceDescriptors()) {
switch (floodgatePlayer.getDeviceOs()) {
case GOOGLE:
- return plugin.getConfiguration().getDevice().getGoogle().replace("&", "§");
+ return config.getDevice().getGoogle().replace("&", "§");
case IOS:
- return plugin.getConfiguration().getDevice().getIOS().replace("&", "§");
+ return config.getDevice().getIOS().replace("&", "§");
case OSX:
- return plugin.getConfiguration().getDevice().getOSX().replace("&", "§");
+ return config.getDevice().getOSX().replace("&", "§");
case AMAZON:
- return plugin.getConfiguration().getDevice().getAmazon().replace("&", "§");
+ return config.getDevice().getAmazon().replace("&", "§");
case GEARVR:
- return plugin.getConfiguration().getDevice().getGearVR().replace("&", "§");
+ return config.getDevice().getGearVR().replace("&", "§");
case HOLOLENS:
- return plugin.getConfiguration().getDevice().getHololens().replace("&", "§");
+ return config.getDevice().getHololens().replace("&", "§");
case UWP:
- return plugin.getConfiguration().getDevice().getUwp().replace("&", "§");
+ return config.getDevice().getUwp().replace("&", "§");
case WIN32:
- return plugin.getConfiguration().getDevice().getWin32().replace("&", "§");
+ return config.getDevice().getWin32().replace("&", "§");
case DEDICATED:
- return plugin.getConfiguration().getDevice().getDedicated().replace("&", "§");
+ return config.getDevice().getDedicated().replace("&", "§");
case PS4:
- return plugin.getConfiguration().getDevice().getPs4().replace("&", "§");
+ return config.getDevice().getPs4().replace("&", "§");
case NX:
- return plugin.getConfiguration().getDevice().getNX().replace("&", "§");
+ return config.getDevice().getNX().replace("&", "§");
case XBOX:
- return plugin.getConfiguration().getDevice().getXbox().replace("&", "§");
+ return config.getDevice().getXbox().replace("&", "§");
default:
- return plugin.getConfiguration().getDevice().getUnknown().replace("&", "§");
+ return config.getDevice().getUnknown().replace("&", "§");
}
}else{
- return plugin.getConfiguration().getDevice().getGeneric().replace("&", "§");
+ return config.getDevice().getGeneric().replace("&", "§");
}
} else {
- return plugin.getConfiguration().getDevice().getJava().replace("&", "§");
+ return config.getDevice().getJava().replace("&", "§");
}
}
+ @Override
+ public Map getDefaults() {
+ if (!(config instanceof ExpansionConfig)) {
+ return null;
+ }
+
+ final Map defaults = new HashMap<>();
+ defaults.put("device.java", "&8[&aJava&8]");
+ defaults.put("device.generic", "&8[&7Bedrock&8]");
+ defaults.put("device.unknown", "&8[&aUnknown&8]");
+ defaults.put("device.google", "&8[&aAndroid&8]");
+ defaults.put("device.ios", "&8[&bi&fOS&8]");
+ defaults.put("device.osx", "&8[&fOS&bX&8]");
+ defaults.put("device.amazon", "&8[&6Amazon&8]");
+ defaults.put("device.gearvr", "&8[&7Gear&fVR&8]");
+ defaults.put("device.hololens", "&8[&7Holo&fLens&8]");
+ defaults.put("device.uwp", "&8[&3UWP&8]");
+ defaults.put("device.win32", "&8[&3Win&f32&8]");
+ defaults.put("device.dedicated", "&8[&aDED&8]");
+ defaults.put("device.ps4", "&8[&3PS4&8]");
+ defaults.put("device.nx", "&8[&eSwitch&8]");
+ defaults.put("device.xbox", "&8[&2Xbox&8]");
+ defaults.put("locale.found", "&8[&6%locale%&8]");
+ defaults.put("locale.none", "&8[&6N/A&8]");
+ defaults.put("version.found", "&8[&6%version%&8]");
+ defaults.put("version.none", "&8[&6N/A&8]");
+ defaults.put("xbox-username.found", "&8[&6%username%&8]");
+ defaults.put("xbox-username.none", "&8[&6N/A&8]");
+ defaults.put("xbox-xuid.found", "&8[&6%xuid%&8]");
+ defaults.put("xbox-xuid.none", "&8[&6N/A&8]");
+ return defaults;
+ }
}
diff --git a/src/main/java/com/rtm516/FloodgatePlaceholders/PluginConfig.java b/src/main/java/com/rtm516/FloodgatePlaceholders/PluginConfig.java
new file mode 100644
index 0000000..5500816
--- /dev/null
+++ b/src/main/java/com/rtm516/FloodgatePlaceholders/PluginConfig.java
@@ -0,0 +1,111 @@
+package com.rtm516.FloodgatePlaceholders;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
+import lombok.Getter;
+
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+@Getter
+public class PluginConfig implements Config {
+ @JsonProperty(value = "specific-device-descriptors")
+ private boolean specificDeviceDescriptors;
+
+ @JsonProperty(value = "device")
+ private PluginDevicePlaceholders device;
+
+ @JsonProperty(value = "locale")
+ private PluginGenericPlaceholders locale;
+
+ @JsonProperty(value = "version")
+ private PluginGenericPlaceholders version;
+
+ @JsonProperty(value = "xbox-username")
+ private PluginGenericPlaceholders xboxUsername;
+
+ @JsonProperty(value = "xbox-xuid")
+ private PluginGenericPlaceholders xboxXuid;
+
+ @Getter
+ public static class PluginDevicePlaceholders implements DevicePlaceholders {
+ @JsonProperty("java")
+ private String java;
+
+ @JsonProperty("generic")
+ private String generic;
+
+ @JsonProperty("unknown")
+ private String unknown;
+
+ @JsonProperty("google")
+ private String google;
+
+ @JsonProperty("ios")
+ private String iOS;
+
+ @JsonProperty("osx")
+ private String OSX;
+
+ @JsonProperty("amazon")
+ private String amazon;
+
+ @JsonProperty("gearvr")
+ private String gearVR;
+
+ @JsonProperty("hololens")
+ private String hololens;
+
+ @JsonProperty("uwp")
+ private String uwp;
+
+ @JsonProperty("win32")
+ private String win32;
+
+ @JsonProperty("dedicated")
+ private String dedicated;
+
+ @JsonProperty("ps4")
+ private String ps4;
+
+ @JsonProperty("nx")
+ private String NX;
+
+ @JsonProperty("xbox")
+ private String xbox;
+ }
+
+ @Getter
+ public static class PluginGenericPlaceholders implements GenericPlaceholders {
+ @JsonProperty("found")
+ private String found;
+
+ @JsonProperty("none")
+ private String none;
+ }
+
+ public static PluginConfig load(Logger logger, Path configPath) {
+ PluginConfig pluginConfig = null;
+ try {
+ try {
+ if (!configPath.toFile().exists())
+ Files.copy(PluginConfig.class.getClassLoader().getResourceAsStream("config.yml"), configPath);
+ } catch (Exception e) {
+ logger.log(Level.SEVERE, "Error while creating config.yml", e);
+ }
+
+ pluginConfig = new ObjectMapper(new YAMLFactory()).readValue(Files.readAllBytes(configPath), PluginConfig.class);
+ } catch (Exception e) {
+ logger.log(Level.SEVERE, "Error while loading config.yml", e);
+ }
+
+ if (pluginConfig == null) {
+ throw new RuntimeException("Failed to load config file! Try to delete the data folder of FloodgatePlaceholders");
+ }
+
+ return pluginConfig;
+ }
+}
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index 07306e7..6160822 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -9,7 +9,7 @@ device:
google: "&8[&aAndroid&8]"
ios: "&8[&bi&fOS&8]"
osx: "&8[&fOS&bX&8]"
- fireos: "&8[&6F&fireOS&8]"
+ amazon: "&8[&6Amazon&8]"
gearvr: "&8[&7Gear&fVR&8]"
hololens: "&8[&7Holo&fLens&8]"
uwp: "&8[&3UWP&8]"
@@ -17,7 +17,7 @@ device:
dedicated: "&8[&aDED&8]"
ps4: "&8[&3PS4&8]"
nx: "&8[&eSwitch&8]"
- xboxOne: "&8[&2Xbox&8]"
+ xbox: "&8[&2Xbox&8]"
# The locale format (none for java users)
locale:
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index 54dc1c6..4df620e 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -3,4 +3,4 @@ main: com.rtm516.FloodgatePlaceholders.Main
version: ${project.version}
author: rtm516
api-version: 1.15
-depend: [floodgate,PlaceholderAPI]
\ No newline at end of file
+depend: [floodgate, PlaceholderAPI]
\ No newline at end of file