From 41ba1a7642105ac21b67f4febac3eceef6a39f0a Mon Sep 17 00:00:00 2001 From: faketruth Date: Sat, 13 Oct 2012 23:34:47 +0000 Subject: Completely removed support for old style Lua plugins (can use both Plugin and NewPlugin in settings.ini for now) Removed cPlugin_Lua, obviously cPluginManager stores plugins by their (folder)name cPluginManager now scans the Plugins folder for potential plugins and adds them as non-loaded plugins Added a DisablePlugin and LoadPlugin to disable and load plugins on a per-plugin basis instead of all at once cPluginManager::FindPlugins refreshes the plugin list by removing non-existing plugins and adding new plugins Made it incredibly easy to use new plugins from the WebAdmin Exposed some food/hunger related functions in cPlayer to Lua git-svn-id: http://mc-server.googlecode.com/svn/trunk@959 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- MCServer/Plugins/Core/web_manageplugins.lua | 140 +++++++++++++++++++--------- MCServer/settings.ini | 8 +- 2 files changed, 99 insertions(+), 49 deletions(-) (limited to 'MCServer') diff --git a/MCServer/Plugins/Core/web_manageplugins.lua b/MCServer/Plugins/Core/web_manageplugins.lua index 3030efc7a..cd785ec53 100644 --- a/MCServer/Plugins/Core/web_manageplugins.lua +++ b/MCServer/Plugins/Core/web_manageplugins.lua @@ -2,31 +2,93 @@ local function Button_RemovePlugin( Name, Index ) return "
" end +local function Button_EnablePlugin( Name ) + return [[
]] +end + +local function Button_DisablePlugin( Name ) + return [[
]] +end + +local function FindPluginID( SettingsIni, PluginName ) + local KeyIdx = SettingsIni:FindKey("Plugins") + local NumValues = SettingsIni:GetNumValues( KeyIdx ) + + for i = 0, NumValues-1 do + LOGINFO( SettingsIni:GetValue(KeyIdx, i) ) + if( SettingsIni:GetValue(KeyIdx, i) == PluginName ) then + return i + end + end + + return nil +end + +local function RemovePluginFromIni( SettingsIni, PluginName ) + local KeyIdx = SettingsIni:FindKey("Plugins") + local PluginIdx = FindPluginID( SettingsIni, PluginName ) + + if( PluginIdx == nil ) then + LOGINFO("Got nil! NOOOO") + return false + end + + local Name = SettingsIni:GetValue( KeyIdx, PluginIdx ) + if( Name ~= PluginName ) then + LOGINFO("not the same name T_T '" .. Name .. "' '" .. PluginName .. "'") + end + if( (Name == PluginName) and (SettingsIni:DeleteValueByID( KeyIdx, PluginIdx ) == true) ) then + return SettingsIni:WriteFile() + end + + return false +end + +local function AddPluginToIni( SettingsIni, PluginName ) + RemovePluginFromIni( SettingsIni, PluginName ) -- Make sure there are no duplicates + + if( SettingsIni:SetValue("Plugins", "Plugin", PluginName, true ) == true ) then + return SettingsIni:WriteFile() + end + + return false +end + local function HandlePluginListChanges( Request, SettingsIni ) local Content = "" - if( Request.PostParams["RemovePlugin"] ~= nil - and Request.PostParams["PluginName"] ~= nil - and Request.PostParams["PluginIndex"] ~= nil ) then -- Removing a plugin + + if( Request.PostParams["EnablePlugin"] ~= nil + and Request.PostParams["PluginName"] ~= nil ) then - local KeyIdx = SettingsIni:FindKey("Plugins") - local PluginIdx = Request.PostParams["PluginIndex"] - - local PluginName = SettingsIni:GetValue( KeyIdx, PluginIdx ) - if( (PluginName == Request.PostParams["PluginName"]) and (SettingsIni:DeleteValueByID( KeyIdx, PluginIdx ) == true) ) then - SettingsIni:WriteFile() - Content = "Removed plugin '" .. PluginName .. "'" + local PluginName = Request.PostParams["PluginName"] + + local PM = cRoot:Get():GetPluginManager() + if( PM:LoadPlugin( PluginName ) == false ) then + Content = "Could not enable '".. PluginName .."'!" + end + + if( AddPluginToIni( SettingsIni, PluginName ) == true ) then + Content = "Enabled plugin '".. PluginName .."'" else - Content = "Whoops! Something went wrong!" + Content = "Enabled plugin '".. PluginName .."' but could not add it to settings.ini" end + + elseif( Request.PostParams["DisablePlugin"] ~= nil + and Request.PostParams["PluginName"] ~= nil ) then - elseif( Request.PostParams["AddPlugin"] ~= nil - and Request.PostParams["PluginName"] ~= nil ) then -- Add a plugin + local PluginName = Request.PostParams["PluginName"] + + local PM = cRoot:Get():GetPluginManager() + PM:DisablePlugin( PluginName ) + + if( RemovePluginFromIni( SettingsIni, PluginName ) == true ) then + Content = "Disabled plugin '".. PluginName .."'" + else + Content = "Disabled plugin '".. PluginName .."' but could not remove it from settings.ini" + end - SettingsIni:SetValue("Plugins", "NewPlugin", Request.PostParams["PluginName"], true ) - SettingsIni:WriteFile() - Content = "Added plugin '".. Request.PostParams["PluginName"] .."'" end @@ -47,45 +109,33 @@ function HandleRequest_ManagePlugins( Request ) return Content end + local SettingsIni = cIniFile("settings.ini") + if( SettingsIni:ReadFile() == true ) then + Content = Content .. HandlePluginListChanges( Request, SettingsIni ) + else + Content = Content .. "Cannot find/modify settings.ini" + end + local PluginManager = cRoot:Get():GetPluginManager() + PluginManager:FindPlugins() -- Refreshes the plugin list local PluginList = PluginManager:GetAllPlugins() - Content = Content .. "

Currently active plugins

" + Content = Content .. "

Currently installed plugins

" Content = Content .. "" for k, Plugin in pairs(PluginList) do - Content = Content .. "" - end - Content = Content .. "
" .. Plugin:GetName() .. " V. " .. Plugin:GetVersion() .. "
" - - local SettingsIni = cIniFile("settings.ini") - if( SettingsIni:ReadFile() == true ) then - Content = Content .. "

Plugins according to settings.ini

" - - Content = Content .. HandlePluginListChanges( Request, SettingsIni ) - - Content = Content .. "" - - local KeyIdx = SettingsIni:FindKey("Plugins") - local NumValues = SettingsIni:GetNumValues( KeyIdx ) - for i = 0, NumValues-1 do - local ValueName = SettingsIni:GetValueName(KeyIdx, i ) - local PluginName = SettingsIni:GetValue(KeyIdx, i) - Content = Content .. "" - Content = Content .. "" - Content = Content .. "" - Content = Content .. "" + Content = Content .. "" + if( Plugin ) then + Content = Content .. "" + else + Content = Content .. "" end - Content = Content .. "
" .. ValueName .. ": " .. PluginName .. "" .. Button_RemovePlugin( PluginName, i ) .. "
".. k .."" .. Plugin:GetName() .. " V. " .. Plugin:GetVersion() .. "" .. Button_DisablePlugin(k) .. "" .. Button_EnablePlugin(k) .. "
" + Content = Content .. "" end - - Content = Content .. "

Add plugin to settings.ini

" - Content = Content .. "
" - Content = Content .. "" - Content = Content .. "
" + Content = Content .. "" Content = Content .. "

Reload

" Content = Content .. "
" - Content = Content .. "

Click the reload button to reload all plugins!
" + Content = Content .. "

Click the reload button to reload all plugins according to settings.ini!" Content = Content .. "

" Content = Content .. "
" diff --git a/MCServer/settings.ini b/MCServer/settings.ini index debdc3918..7e545c86d 100644 --- a/MCServer/settings.ini +++ b/MCServer/settings.ini @@ -11,10 +11,10 @@ Description=MCServer - in C++ DefaultWorld=world [Plugins] -; NewPlugin=sTick -; NewPlugin=DiamondMover -NewPlugin=Core -NewPlugin=ChunkWorx +; Plugin=sTick +; Plugin=DiamondMover +Plugin=Core +Plugin=ChunkWorx [HelpPlugin] ShowPluginNames=1 -- cgit v1.2.3