Fix plugin hook

This commit is contained in:
坏黑
2019-07-09 18:00:43 +08:00
parent 429ceaeca6
commit 70fbae89a5
15 changed files with 211 additions and 69 deletions

View File

@@ -1,10 +1,9 @@
package io.izzel.taboolib.module.compat;
import io.izzel.taboolib.common.plugin.InternalPluginBridge;
import io.izzel.taboolib.module.inject.TFunction;
import net.milkbowl.vault.economy.Economy;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.plugin.RegisteredServiceProvider;
/**
* @Author 坏黑
@@ -16,13 +15,7 @@ public class EconomyHook {
private static Economy economy;
static void init() {
if (Bukkit.getPluginManager().getPlugin("Vault") == null) {
return;
}
RegisteredServiceProvider<Economy> l = Bukkit.getServer().getServicesManager().getRegistration(Economy.class);
if (l != null) {
economy = l.getProvider();
}
economy = InternalPluginBridge.handle().getEconomy();
}
public static void remove(OfflinePlayer p, double d) {

View File

@@ -1,10 +1,9 @@
package io.izzel.taboolib.module.compat;
import io.izzel.taboolib.common.plugin.InternalPluginBridge;
import io.izzel.taboolib.module.inject.TFunction;
import net.milkbowl.vault.permission.Permission;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.plugin.RegisteredServiceProvider;
import java.util.Arrays;
@@ -14,11 +13,7 @@ public class PermissionHook {
private static Permission perms;
static void init() {
if (Bukkit.getPluginManager().getPlugin("Vault") == null) {
return;
}
RegisteredServiceProvider<Permission> rsp = Bukkit.getServer().getServicesManager().getRegistration(Permission.class);
perms = rsp.getProvider();
perms = InternalPluginBridge.handle().getPermission();
}
public static Permission getPermission() {

View File

@@ -1,6 +1,6 @@
package io.izzel.taboolib.module.compat;
import me.clip.placeholderapi.PlaceholderAPI;
import io.izzel.taboolib.common.plugin.InternalPluginBridge;
import io.izzel.taboolib.module.inject.TFunction;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
@@ -9,36 +9,17 @@ import org.bukkit.entity.Player;
@TFunction(enable = "init")
public abstract class PlaceholderHook {
private static PlaceholderHook impl;
private static boolean hooked;
static void init() {
if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) {
impl = new PlaceholderImpl();
} else {
impl = new AbstractImpl();
}
hooked = Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null;
}
public static String replace(CommandSender sender, String text) {
return sender instanceof Player ? impl.replace(((Player) sender), text) : text;
return sender instanceof Player && hooked ? InternalPluginBridge.handle().setPlaceholders((Player) sender, text) : text;
}
abstract String replace(Player player, String text);
private static class PlaceholderImpl extends PlaceholderHook {
@Override
String replace(Player player, String text) {
return PlaceholderAPI.setPlaceholders(player, text);
}
public static boolean isHooked() {
return hooked;
}
private static class AbstractImpl extends PlaceholderHook {
@Override
String replace(Player player, String text) {
return text;
}
}
}

View File

@@ -1,12 +1,10 @@
package io.izzel.taboolib.module.compat;
import com.google.common.base.Preconditions;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.protection.managers.RegionManager;
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
import org.bukkit.Bukkit;
import io.izzel.taboolib.common.plugin.InternalPluginBridge;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
@@ -26,8 +24,7 @@ public class WorldGuardHook {
private Method getRegionManager;
public WorldGuardHook() {
Preconditions.checkNotNull(Bukkit.getServer().getPluginManager().getPlugin("WorldGuard"), "WorldGuard was not found.");
worldGuard = WorldGuardPlugin.inst();
worldGuard = InternalPluginBridge.handle().getWorldGuardPlugin();
if (!worldGuard.getDescription().getVersion().startsWith("7")) {
try {
getRegionManager = WorldGuardPlugin.class.getDeclaredMethod("getRegionManager", World.class);
@@ -44,7 +41,7 @@ public class WorldGuardHook {
public RegionManager getRegionManager(World world) {
if (worldGuard.getDescription().getVersion().startsWith("7")) {
return WorldGuard.getInstance().getPlatform().getRegionContainer().get(BukkitAdapter.adapt(world));
return InternalPluginBridge.handle().getWorldGuard().getPlatform().getRegionContainer().get(BukkitAdapter.adapt(world));
} else {
try {
return (RegionManager) getRegionManager.invoke(worldGuard, world);

View File

@@ -2,12 +2,12 @@ package io.izzel.taboolib.module.db.source;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import io.izzel.taboolib.module.locale.TLocale;
import io.izzel.taboolib.module.config.TConfig;
import io.izzel.taboolib.module.inject.TInject;
import io.izzel.taboolib.module.db.IHost;
import io.izzel.taboolib.module.db.sql.SQLHost;
import io.izzel.taboolib.module.db.sqlite.SQLiteHost;
import io.izzel.taboolib.module.inject.TInject;
import io.izzel.taboolib.module.locale.TLocale;
import org.bukkit.configuration.file.FileConfiguration;
import javax.sql.DataSource;

View File

@@ -3,7 +3,9 @@ package io.izzel.taboolib.module.lite;
import com.google.common.collect.Lists;
import io.izzel.taboolib.TabooLib;
import io.izzel.taboolib.Version;
import io.izzel.taboolib.common.plugin.bridge.BridgeLoader;
import io.izzel.taboolib.util.Files;
import io.izzel.taboolib.util.Ref;
import io.izzel.taboolib.util.asm.AsmClassLoader;
import org.bukkit.plugin.Plugin;
import org.objectweb.asm.ClassReader;
@@ -126,6 +128,20 @@ public class SimpleVersionControl {
return newClass;
}
public Class<?> translateBridge() throws IOException {
Class<?> callerClass = Ref.getCallerClass(3).orElse(null);
if (callerClass != null && !callerClass.getName().startsWith("io.izzel")) {
throw new IllegalStateException();
}
ClassReader classReader = new ClassReader(Files.getTabooLibResource(target.replace(".", "/") + ".class"));
ClassWriter classWriter = new ClassWriter(0);
ClassVisitor classVisitor = new SimpleClassVisitor(this, classWriter);
classReader.accept(classVisitor, ClassReader.EXPAND_FRAMES);
classWriter.visitEnd();
classVisitor.visitEnd();
return BridgeLoader.createNewClass(target, classWriter.toByteArray());
}
// *********************************
//
// Getter and Setter

View File

@@ -1,6 +1,7 @@
package io.izzel.taboolib.module.locale;
import io.izzel.taboolib.TabooLib;
import io.izzel.taboolib.module.compat.PlaceholderHook;
import io.izzel.taboolib.module.locale.logger.TLoggerManager;
import io.izzel.taboolib.module.nms.NMS;
import io.izzel.taboolib.module.tellraw.TellrawCreator;
@@ -9,7 +10,6 @@ import io.izzel.taboolib.util.Strings;
import io.izzel.taboolib.util.chat.ChatColor;
import io.izzel.taboolib.util.chat.ComponentSerializer;
import io.izzel.taboolib.util.chat.TextComponent;
import me.clip.placeholderapi.PlaceholderAPI;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@@ -111,7 +111,7 @@ public class TLocale {
}
public static boolean isPlaceholderPluginEnabled() {
return Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null && Bukkit.getPluginManager().getPlugin("PlaceholderAPI").isEnabled();
return PlaceholderHook.isHooked();
}
public static String setColored(String args) {
@@ -131,11 +131,11 @@ public class TLocale {
}
public static String setPlaceholders(CommandSender sender, String args) {
return isPlaceholderPluginEnabled() ? sender instanceof Player ? PlaceholderAPI.setPlaceholders((Player) sender, args) : args : args;
return PlaceholderHook.replace(sender, args);
}
public static List<String> setPlaceholders(CommandSender sender, List<String> args) {
return isPlaceholderPluginEnabled() ? sender instanceof Player ? PlaceholderAPI.setPlaceholders((Player) sender, args) : args : args;
return args.stream().map(var -> PlaceholderHook.replace(sender, var)).collect(Collectors.toList());
}
}