Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
147 changes: 101 additions & 46 deletions Rocket.Unturned/Commands/CommandRocket.cs
Original file line number Diff line number Diff line change
Expand Up @@ -50,85 +50,140 @@ public void Execute(IRocketPlayer caller, string[] command)
{
if (command.Length == 0)
{
UnturnedChat.Say(caller, $"RocketModFix v{Assembly.GetExecutingAssembly().GetName().Version} for Unturned v{Provider.APP_VERSION}");
UnturnedChat.Say(caller,
$"RocketModFix v{Assembly.GetExecutingAssembly().GetName().Version} for Unturned v{Provider.APP_VERSION}");
UnturnedChat.Say(caller, "https://github.com/RocketModFix/RocketModFix/");
UnturnedChat.Say(caller, "https://discord.gg/z6VM7taWeG");
return;
}

if (command.Length == 1)
{
switch (command[0].ToLower()) {
switch (command[0].ToLower())
{
case "plugins":
if (caller != null && !caller.HasPermission("rocket.plugins")) return;
List<IRocketPlugin> plugins = R.Plugins.GetPlugins();
UnturnedChat.Say(caller, U.Translate("command_rocket_plugins_loaded", String.Join(", ", plugins.Where(p => p.State == PluginState.Loaded).Select(p => p.GetType().Assembly.GetName().Name).ToArray())));
UnturnedChat.Say(caller, U.Translate("command_rocket_plugins_unloaded", String.Join(", ", plugins.Where(p => p.State == PluginState.Unloaded).Select(p => p.GetType().Assembly.GetName().Name).ToArray())));
UnturnedChat.Say(caller, U.Translate("command_rocket_plugins_failure", String.Join(", ", plugins.Where(p => p.State == PluginState.Failure).Select(p => p.GetType().Assembly.GetName().Name).ToArray())));
UnturnedChat.Say(caller, U.Translate("command_rocket_plugins_cancelled", String.Join(", ", plugins.Where(p => p.State == PluginState.Cancelled).Select(p => p.GetType().Assembly.GetName().Name).ToArray())));
UnturnedChat.Say(caller,
U.Translate("command_rocket_plugins_loaded",
String.Join(", ",
plugins.Where(p => p.State == PluginState.Loaded)
.Select(p => p.GetType().Assembly.GetName().Name).ToArray())));
UnturnedChat.Say(caller,
U.Translate("command_rocket_plugins_unloaded",
String.Join(", ",
plugins.Where(p => p.State == PluginState.Unloaded)
.Select(p => p.GetType().Assembly.GetName().Name).ToArray())));
UnturnedChat.Say(caller,
U.Translate("command_rocket_plugins_failure",
String.Join(", ",
plugins.Where(p => p.State == PluginState.Failure)
.Select(p => p.GetType().Assembly.GetName().Name).ToArray())));
UnturnedChat.Say(caller,
U.Translate("command_rocket_plugins_cancelled",
String.Join(", ",
plugins.Where(p => p.State == PluginState.Cancelled)
.Select(p => p.GetType().Assembly.GetName().Name).ToArray())));
break;
case "reload":
if (caller!=null && !caller.HasPermission("rocket.reload")) return;
// Many plugins do not support reloading properly, so this command which reloaded all plugins
// at once has been disabled by popular request. Reloading individual plugins is still enabled.
// https://github.com/SmartlyDressedGames/Unturned-3.x-Community/issues/1794
UnturnedChat.Say(caller, U.Translate("command_rocket_reload_disabled"));
if (caller != null && !caller.HasPermission("rocket.reload")) return;
// Many plugins do not support reloading properly, so this command which reloaded all plugins
// at once has been disabled by popular request. Reloading individual plugins is still enabled.
// https://github.com/SmartlyDressedGames/Unturned-3.x-Community/issues/1794
UnturnedChat.Say(caller, U.Translate("command_rocket_reload_disabled"));
break;
}
}

if (command.Length == 2)
{
RocketPlugin p = (RocketPlugin)R.Plugins.GetPlugins().Where(pl => pl.Name.ToLower().Contains(command[1].ToLower())).FirstOrDefault();
if (p != null)
var plugin = R.Plugins
.GetPlugins()
.FirstOrDefault(pl => pl.Name.ToLower().Contains(command[1].ToLower()));
if (plugin == null)
{
UnturnedChat.Say(caller, U.Translate("command_rocket_plugin_not_found", command[1]));
return;
}
if (plugin is not RocketPlugin rocketPlugin)
{
switch (command[0].ToLower())
{
case "reload":
if (caller != null && !caller.HasPermission("rocket.reloadplugin")) return;
if (p.State == PluginState.Loaded)
// Probably plugin don't want to allow reload/unload/load plugin
return;
}

var pluginName = rocketPlugin.GetType().Assembly.GetName().Name;
switch (command[0].ToLower())
{
case "reload":
if (caller != null && !caller.HasPermission("rocket.reloadplugin")) return;
if (rocketPlugin.State == PluginState.Loaded)
{
UnturnedChat.Say(caller, U.Translate("command_rocket_reload_plugin", pluginName));
try
{
UnturnedChat.Say(caller, U.Translate("command_rocket_reload_plugin", p.GetType().Assembly.GetName().Name));
p.ReloadPlugin();
rocketPlugin.ReloadPlugin();
UnturnedChat.Say(caller, U.Translate("command_rocket_reloaded_plugin", pluginName));
}
else
catch (Exception ex)
{
UnturnedChat.Say(caller, U.Translate("command_rocket_not_loaded", p.GetType().Assembly.GetName().Name));
UnturnedChat.Say(caller, U.Translate("command_rocket_reload_plugin_error", pluginName));
Logger.LogException(ex, $"An error occured while reloading plugin {pluginName}");
}
break;
case "unload":
if (caller != null && !caller.HasPermission("rocket.unloadplugin")) return;
if (p.State == PluginState.Loaded)
}
else
{
UnturnedChat.Say(caller, U.Translate("command_rocket_not_loaded", pluginName));
}

break;
case "unload":
if (caller != null && !caller.HasPermission("rocket.unloadplugin")) return;
if (rocketPlugin.State == PluginState.Loaded)
{
UnturnedChat.Say(caller, U.Translate("command_rocket_unloading_plugin", pluginName));
try
{
UnturnedChat.Say(caller, U.Translate("command_rocket_unload_plugin", p.GetType().Assembly.GetName().Name));
p.UnloadPlugin();
rocketPlugin.UnloadPlugin();

UnturnedChat.Say(caller, U.Translate("command_rocket_unloaded_plugin", pluginName));
}
else
catch (Exception ex)
{
UnturnedChat.Say(caller, U.Translate("command_rocket_not_loaded", p.GetType().Assembly.GetName().Name));
UnturnedChat.Say(caller, U.Translate("command_rocket_unloading_plugin_error", pluginName));
Logger.LogException(ex, $"An error occured while unloading plugin {pluginName}");
}
break;
case "load":
if (caller != null && !caller.HasPermission("rocket.loadplugin")) return;
if (p.State != PluginState.Loaded)
}
else
{
UnturnedChat.Say(caller, U.Translate("command_rocket_not_loaded", pluginName));
}

break;
case "load":
if (caller != null && !caller.HasPermission("rocket.loadplugin")) return;
if (rocketPlugin.State != PluginState.Loaded)
{
UnturnedChat.Say(caller, U.Translate("command_rocket_load_plugin", pluginName));
try
{
UnturnedChat.Say(caller, U.Translate("command_rocket_load_plugin", p.GetType().Assembly.GetName().Name));
p.LoadPlugin();
rocketPlugin.LoadPlugin();

UnturnedChat.Say(caller, U.Translate("command_rocket_loaded_plugin", pluginName));
}
else
catch (Exception ex)
{
UnturnedChat.Say(caller, U.Translate("command_rocket_already_loaded", p.GetType().Assembly.GetName().Name));
UnturnedChat.Say(caller, U.Translate("command_rocket_loaded_plugin_error", pluginName));
Logger.LogException(ex, $"An error occured while loading plugin {pluginName}");
}
break;
}
}
else
{
UnturnedChat.Say(caller, U.Translate("command_rocket_plugin_not_found", command[1]));
}
else
{
UnturnedChat.Say(caller, U.Translate("command_rocket_already_loaded", pluginName));
}

break;
}
}


}
}
}
12 changes: 9 additions & 3 deletions Rocket.Unturned/U.cs
Original file line number Diff line number Diff line change
Expand Up @@ -88,10 +88,16 @@ public class U : MonoBehaviour, IRocketImplementation, IModuleNexus
{ "command_rocket_plugins_unloaded","Unloaded: {0}"},
{ "command_rocket_plugins_failure","Failure: {0}"},
{ "command_rocket_plugins_cancelled","Cancelled: {0}"},
{ "command_rocket_reload_plugin","Reloading {0}"},
{ "command_rocket_reload_plugin","Reloading... {0}"},
{ "command_rocket_reloaded_plugin","Reloaded {0}"},
{ "command_rocket_reload_plugin_error","An error occured while reloading plugin {0}. See logs for more details."},
{ "command_rocket_not_loaded","The plugin {0} is not loaded"},
{ "command_rocket_unload_plugin","Unloading {0}"},
{ "command_rocket_load_plugin","Loading {0}"},
{ "command_rocket_unloading_plugin","Unloading... {0}"},
{ "command_rocket_unloading_plugin_error","An error occured while unloading plugin {0}. See logs for more details."},
{ "command_rocket_unloaded_plugin","Unloaded {0}"},
{ "command_rocket_load_plugin","Loading... {0}"},
{ "command_rocket_loaded_plugin_error","Loaded {0}"},
{ "command_rocket_loaded_plugin","Loaded {0}"},
{ "command_rocket_already_loaded","The plugin {0} is already loaded"},
{ "command_rocket_reload","Reloading Rocket"},
{ "command_rocket_reload_disabled", "Please reload individual plugins instead" },
Expand Down