Use Reflections for Plex
This commit is contained in:
parent
f2e1cd2c3b
commit
9a63b857d5
|
@ -13,17 +13,12 @@ repositories {
|
||||||
maven {
|
maven {
|
||||||
url = uri("https://papermc.io/repo/repository/maven-public/")
|
url = uri("https://papermc.io/repo/repository/maven-public/")
|
||||||
}
|
}
|
||||||
|
|
||||||
maven {
|
|
||||||
url = uri("https://nexus.telesphoreo.me/repository/plex/")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation("org.projectlombok:lombok:1.18.22")
|
implementation("org.projectlombok:lombok:1.18.22")
|
||||||
annotationProcessor("org.projectlombok:lombok:1.18.22")
|
annotationProcessor("org.projectlombok:lombok:1.18.22")
|
||||||
implementation("io.papermc.paper:paper-api:1.18.2-R0.1-SNAPSHOT")
|
implementation("io.papermc.paper:paper-api:1.18.2-R0.1-SNAPSHOT")
|
||||||
implementation("dev.plex:Plex:1.0.2-SNAPSHOT")
|
|
||||||
library("org.json:json:20220320")
|
library("org.json:json:20220320")
|
||||||
library("commons-io:commons-io:2.11.0")
|
library("commons-io:commons-io:2.11.0")
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,7 @@ public class Emotes extends JavaPlugin
|
||||||
if (!getServer().getPluginManager().isPluginEnabled("TotalFreedomMod")
|
if (!getServer().getPluginManager().isPluginEnabled("TotalFreedomMod")
|
||||||
&& !getServer().getPluginManager().isPluginEnabled("Plex"))
|
&& !getServer().getPluginManager().isPluginEnabled("Plex"))
|
||||||
{
|
{
|
||||||
getLogger().log(Level.WARNING, "Plex nor TotalFreedomMod was found. Defaulting to if the player is op for permissions");
|
getLogger().log(Level.WARNING, "Plex nor TotalFreedomMod was found, using permissions.");
|
||||||
}
|
}
|
||||||
this.tfmBridge = new TFMBridge();
|
this.tfmBridge = new TFMBridge();
|
||||||
tfmBridge.getTFM();
|
tfmBridge.getTFM();
|
||||||
|
@ -39,6 +39,16 @@ public class Emotes extends JavaPlugin
|
||||||
plexBridge.getPlex();
|
plexBridge.getPlex();
|
||||||
this.cooldownTask = new CooldownTask();
|
this.cooldownTask = new CooldownTask();
|
||||||
this.cooldownTask.runTaskTimerAsynchronously(plugin, 0L, 20L);
|
this.cooldownTask.runTaskTimerAsynchronously(plugin, 0L, 20L);
|
||||||
|
loadCommands();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onDisable()
|
||||||
|
{
|
||||||
|
this.cooldownTask.cancel();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void loadCommands()
|
||||||
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
EmoteLoader.registerDefaultEmote("greet");
|
EmoteLoader.registerDefaultEmote("greet");
|
||||||
|
@ -58,9 +68,4 @@ public class Emotes extends JavaPlugin
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onDisable()
|
|
||||||
{
|
|
||||||
this.cooldownTask.cancel();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,11 @@
|
||||||
package dev.plex.emotes.bridge;
|
package dev.plex.emotes.bridge;
|
||||||
|
|
||||||
import dev.plex.Plex;
|
|
||||||
import dev.plex.cache.DataUtils;
|
|
||||||
import dev.plex.emotes.EmotesBase;
|
import dev.plex.emotes.EmotesBase;
|
||||||
import dev.plex.player.PlexPlayer;
|
import dev.plex.emotes.util.ReflectionsHelper;
|
||||||
import dev.plex.rank.enums.Rank;
|
import java.util.Locale;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.ConsoleCommandSender;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
public class PlexBridge implements EmotesBase
|
public class PlexBridge implements EmotesBase
|
||||||
|
@ -33,17 +32,29 @@ public class PlexBridge implements EmotesBase
|
||||||
return plex;
|
return plex;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean checkRank(CommandSender sender, Rank rank, String permission)
|
public boolean checkRank(CommandSender sender, String rankName, String permission)
|
||||||
{
|
{
|
||||||
if (getPlex() == null)
|
if (getPlex() == null)
|
||||||
{
|
{
|
||||||
Bukkit.getLogger().warning("Plex not detected either. Using standard permission check for permission: " + permission);
|
Bukkit.getLogger().warning("Plex not detected either. Using standard permission check for permission: " + permission);
|
||||||
return sender.hasPermission(permission);
|
return sender.hasPermission(permission);
|
||||||
}
|
}
|
||||||
if (Plex.get().getSystem().equalsIgnoreCase("ranks"))
|
String system = ReflectionsHelper.invokeMethod(plex, "getSystem");
|
||||||
|
if (system == null)
|
||||||
{
|
{
|
||||||
PlexPlayer plexPlayer = DataUtils.getPlayer(sender.getName());
|
Bukkit.getLogger().severe("Unable to find Plex's system. Reflections may be setup incorrectly. Using standard permission check for permission: " + permission);
|
||||||
return plexPlayer.getRankFromString().isAtLeast(rank);
|
return sender.hasPermission(permission);
|
||||||
|
}
|
||||||
|
if (system.equalsIgnoreCase("ranks"))
|
||||||
|
{
|
||||||
|
if (sender instanceof ConsoleCommandSender)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
Object plexPlayer = ReflectionsHelper.invokeStaticMethod("dev.plex.cache.DataUtils", "getPlayer", sender.getName());
|
||||||
|
Enum<?> rank = ReflectionsHelper.invokeMethod(plexPlayer, "getRankFromString");
|
||||||
|
Object rankFromEnum = ReflectionsHelper.getEnumValue("dev.plex.rank.enums.Rank", rankName.toUpperCase(Locale.ROOT));
|
||||||
|
return Boolean.TRUE.equals(ReflectionsHelper.invokeMethod(rank, "isAtLeast", rankFromEnum));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -4,7 +4,6 @@ import dev.plex.emotes.EmotesBase;
|
||||||
import dev.plex.emotes.util.EmoteLoader;
|
import dev.plex.emotes.util.EmoteLoader;
|
||||||
import dev.plex.emotes.util.EmoteMeta;
|
import dev.plex.emotes.util.EmoteMeta;
|
||||||
import dev.plex.emotes.util.MessageUtils;
|
import dev.plex.emotes.util.MessageUtils;
|
||||||
import dev.plex.rank.enums.Rank;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -76,17 +75,28 @@ public class Command_emotes implements CommandExecutor, EmotesBase
|
||||||
{
|
{
|
||||||
sender.sendMessage(ChatColor.GREEN + "Reloading Emotes!");
|
sender.sendMessage(ChatColor.GREEN + "Reloading Emotes!");
|
||||||
plugin.reloadConfig();
|
plugin.reloadConfig();
|
||||||
|
plugin.loadCommands();
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
else if (Bukkit.getServer().getPluginManager().isPluginEnabled("Plex") && plugin.plexBridge.checkRank(sender, Rank.ADMIN, "plex.emotes.reload"))
|
else if (Bukkit.getServer().getPluginManager().isPluginEnabled("Plex") && plugin.plexBridge.checkRank(sender, "ADMIN", "plex.emotes.reload"))
|
||||||
{
|
{
|
||||||
sender.sendMessage(ChatColor.GREEN + "Reloading Emotes!");
|
sender.sendMessage(ChatColor.GREEN + "Reloading Emotes!");
|
||||||
plugin.reloadConfig();
|
plugin.reloadConfig();
|
||||||
|
plugin.loadCommands();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (sender.hasPermission("emotes.reload"))
|
||||||
|
{
|
||||||
|
sender.sendMessage(ChatColor.GREEN + "Reloading Emotes!");
|
||||||
|
plugin.reloadConfig();
|
||||||
|
plugin.loadCommands();
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sender.sendMessage(ChatColor.RED + "You do not have permission to use this command!");
|
sender.sendMessage(ChatColor.RED + "You do not have permission to use this command!");
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -67,7 +67,7 @@ public class EmoteLoader
|
||||||
emoteMeta.setDescription(json.getString("description"));
|
emoteMeta.setDescription(json.getString("description"));
|
||||||
emoteMeta.setAuthor(json.getString("author"));
|
emoteMeta.setAuthor(json.getString("author"));
|
||||||
emoteMeta.setUsage(json.getString("usage"));
|
emoteMeta.setUsage(json.getString("usage"));
|
||||||
HashMap<List<EmoteVariable>, String[]> lines = (HashMap)new HashMap<>();
|
HashMap<List<EmoteVariable>, String[]> lines = new HashMap<>();
|
||||||
JSONObject jsonLines = json.getJSONObject("lines");
|
JSONObject jsonLines = json.getJSONObject("lines");
|
||||||
for (String key : jsonLines.keySet())
|
for (String key : jsonLines.keySet())
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
package dev.plex.emotes.util;
|
package dev.plex.emotes.util;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
public class ReflectionsHelper
|
public class ReflectionsHelper
|
||||||
{
|
{
|
||||||
|
@ -34,4 +36,48 @@ public class ReflectionsHelper
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static <T, I> I invokeMethod(T instance, String name, Object... parameters)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Method f = instance.getClass().getDeclaredMethod(name, Arrays.stream(parameters).map(Object::getClass).toList().toArray(Class[]::new));
|
||||||
|
f.setAccessible(true);
|
||||||
|
return (I)f.invoke(instance, parameters);
|
||||||
|
}
|
||||||
|
catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e)
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T, I> I invokeStaticMethod(String classPath, String name, Object... parameters)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Method f = Class.forName(classPath).getDeclaredMethod(name, Arrays.stream(parameters).map(Object::getClass).toList().toArray(Class[]::new));
|
||||||
|
f.setAccessible(true);
|
||||||
|
return (I)f.invoke(null, parameters);
|
||||||
|
}
|
||||||
|
catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException | ClassNotFoundException e)
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Enum<?> getEnumValue(String enumClassPath, String enumVal)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Class<Enum> clazz = (Class<Enum>)Class.forName(enumClassPath);
|
||||||
|
return Enum.valueOf(clazz, enumVal);
|
||||||
|
}
|
||||||
|
catch (ClassNotFoundException e)
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue