80 lines
2.2 KiB
C#
80 lines
2.2 KiB
C#
using System;
|
|
using System.IO;
|
|
using java.lang;
|
|
using java.util;
|
|
using LuckPerms.Torch.Impl;
|
|
using NLog;
|
|
using Sandbox;
|
|
using Torch;
|
|
using Torch.API;
|
|
using Exception = System.Exception;
|
|
using Object = java.lang.Object;
|
|
|
|
namespace LuckPerms.Torch;
|
|
|
|
public class Plugin : TorchPluginBase
|
|
{
|
|
static Plugin()
|
|
{
|
|
// for some fucking reason if jvm is getting initialized in some other place - it throws
|
|
// happens only on framework and most likely related to its retarded types initialization rules
|
|
_ = new Object();
|
|
Locale.setDefault(Locale.ENGLISH);
|
|
}
|
|
|
|
public static readonly ILogger Log = LogManager.GetLogger("LuckPerms");
|
|
private LpTorchBootstrap? _bootstrap;
|
|
|
|
public override void Init(ITorchBase torch)
|
|
{
|
|
base.Init(torch);
|
|
Torch.GameStateChanged += TorchOnGameStateChanged;
|
|
_bootstrap = new((ITorchServer)Torch, this, Log, Path.Combine(StoragePath, "luckperms"));
|
|
|
|
try
|
|
{
|
|
Log.Info("Initializing LuckPerms");
|
|
_bootstrap.Plugin.load();
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Log.Fatal(e);
|
|
throw;
|
|
}
|
|
finally
|
|
{
|
|
_bootstrap.LoadLatch.countDown();
|
|
}
|
|
}
|
|
|
|
private void TorchOnGameStateChanged(MySandboxGame game, TorchGameState newState)
|
|
{
|
|
if (_bootstrap is null)
|
|
throw new InvalidOperationException("Plugin is not initialized");
|
|
|
|
switch (newState)
|
|
{
|
|
case TorchGameState.Loading:
|
|
try
|
|
{
|
|
Log.Info("Loading LuckPerms");
|
|
Thread.currentThread().setContextClassLoader(LpDependencyManager.CurrentClassLoader);
|
|
_bootstrap.Plugin.enable();
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Log.Fatal(e);
|
|
throw;
|
|
}
|
|
finally
|
|
{
|
|
_bootstrap.EnableLatch.countDown();
|
|
}
|
|
break;
|
|
case TorchGameState.Unloading:
|
|
Log.Info("Unloading LuckPerms");
|
|
_bootstrap.Plugin.disable();
|
|
break;
|
|
}
|
|
}
|
|
} |