mirror of
https://github.com/GeorgH93/Minepacks.git
synced 2024-11-15 10:55:20 +01:00
Add paper plugin loading with mode switching
This commit is contained in:
parent
26d7df2bf4
commit
f12d2c6f1c
@ -4,4 +4,8 @@ version: "${version}"
|
|||||||
api-version: "1.19"
|
api-version: "1.19"
|
||||||
|
|
||||||
main: "at.pcgamingfreaks.MinepacksStandalone.Bukkit.Minepacks"
|
main: "at.pcgamingfreaks.MinepacksStandalone.Bukkit.Minepacks"
|
||||||
bootstrapper: "at.pcgamingfreaks.Minepacks.Paper.MinepacksBootstrap"
|
bootstrapper: "at.pcgamingfreaks.Minepacks.Paper.MinepacksBootstrap"
|
||||||
|
|
||||||
|
dependencies:
|
||||||
|
- name: PCGF_PluginLib
|
||||||
|
required: false
|
@ -23,8 +23,15 @@
|
|||||||
import io.papermc.paper.plugin.bootstrap.PluginBootstrap;
|
import io.papermc.paper.plugin.bootstrap.PluginBootstrap;
|
||||||
import io.papermc.paper.plugin.bootstrap.PluginProviderContext;
|
import io.papermc.paper.plugin.bootstrap.PluginProviderContext;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
|
||||||
|
@SuppressWarnings({ "UnstableApiUsage", "unused" })
|
||||||
public class MinepacksBootstrap implements PluginBootstrap
|
public class MinepacksBootstrap implements PluginBootstrap
|
||||||
{
|
{
|
||||||
|
private static final String MAIN_CLASS_NORMAL = "at.pcgamingfreaks.Minepacks.Bukkit.Minepacks";
|
||||||
|
private static final String MAIN_CLASS_STANDALONE = "at.pcgamingfreaks.MinepacksStandalone.Bukkit.Minepacks";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void bootstrap(@NotNull PluginProviderContext context)
|
public void bootstrap(@NotNull PluginProviderContext context)
|
||||||
{
|
{
|
||||||
@ -33,36 +40,17 @@ public void bootstrap(@NotNull PluginProviderContext context)
|
|||||||
@Override
|
@Override
|
||||||
public @NotNull JavaPlugin createPlugin(@NotNull PluginProviderContext context)
|
public @NotNull JavaPlugin createPlugin(@NotNull PluginProviderContext context)
|
||||||
{
|
{
|
||||||
//TODO find a way to check if PCGF PluginLib exists
|
|
||||||
//Plugin pcgfPluginLib = Bukkit.getPluginManager().getPlugin("PCGF_PluginLib");
|
|
||||||
boolean standalone = true;
|
|
||||||
/*if(pcgfPluginLib != null)
|
|
||||||
{
|
|
||||||
if(new Version(pcgfPluginLib.getDescription().getVersion()).olderThan(new Version(MagicValues.MIN_PCGF_PLUGIN_LIB_VERSION)))
|
|
||||||
{
|
|
||||||
getLogger().info("PCGF-PluginLib to old! Switching to standalone mode!");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
getLogger().info("PCGF-PluginLib installed. Switching to normal mode!");
|
|
||||||
standalone = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
getLogger().info("PCGF-PluginLib not installed. Switching to standalone mode!");
|
|
||||||
}*/
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if(standalone)
|
if(checkPcgfPluginLib(context) && patchPluginMeta(context))
|
||||||
{
|
{
|
||||||
Class<?> standaloneClass = Class.forName("at.pcgamingfreaks.MinepacksStandalone.Bukkit.Minepacks");
|
Class<?> normalClass = Class.forName(MAIN_CLASS_NORMAL);
|
||||||
return (JavaPlugin) standaloneClass.newInstance();
|
return (JavaPlugin) normalClass.newInstance();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Class<?> normalClass = Class.forName("at.pcgamingfreaks.Minepacks.Bukkit.Minepacks");
|
Class<?> standaloneClass = Class.forName(MAIN_CLASS_STANDALONE);
|
||||||
return (JavaPlugin) normalClass.newInstance();
|
return (JavaPlugin) standaloneClass.newInstance();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch(Exception e)
|
catch(Exception e)
|
||||||
@ -70,4 +58,44 @@ public void bootstrap(@NotNull PluginProviderContext context)
|
|||||||
throw new RuntimeException("Failed to create Minepacks plugin instance!", e);
|
throw new RuntimeException("Failed to create Minepacks plugin instance!", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean patchPluginMeta(final @NotNull PluginProviderContext context)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Class<?> pluginMetaClass = context.getConfiguration().getClass();
|
||||||
|
Field mainField = pluginMetaClass.getDeclaredField("main");
|
||||||
|
mainField.setAccessible(true);
|
||||||
|
mainField.set(context.getConfiguration(), MAIN_CLASS_NORMAL);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch(Exception e)
|
||||||
|
{
|
||||||
|
context.getLogger().log(Level.SEVERE, "Failed to patch main class in PluginMeta! Falling back to Standalone mode!", e);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean checkPcgfPluginLib(final @NotNull PluginProviderContext context)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Class.forName("at.pcgamingfreaks.PluginLib.Bukkit.PluginLib");
|
||||||
|
//if (new Version(pcgfPluginLib.getDescription().getVersion()).olderThan(new Version(MagicValues.MIN_PCGF_PLUGIN_LIB_VERSION)))
|
||||||
|
if (true) // TODO check version
|
||||||
|
{
|
||||||
|
context.getLogger().info("PCGF-PluginLib installed. Switching to normal mode!");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
context.getLogger().info("PCGF-PluginLib to old! Switching to standalone mode!");
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch(ClassNotFoundException ignored)
|
||||||
|
{
|
||||||
|
context.getLogger().info("PCGF-PluginLib not installed. Switching to standalone mode!");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user