About Split Plugin Loader
Introducing the Split Plugin Loader for Rust! This innovative tool revolutionizes the way plugins are managed and loaded by amalgamating multiple files for a single plugin and seamlessly compiling them into one cohesive unit. If you have been dealing with a single massive plugin file and ever wished for a more streamlined, organized approach, the Split Plugin Loader is your answer. Whether you're working with Oxide or Carbon, the Split Plugin Loader seamlessly integrates, ensuring a more streamlined and enhanced plugin experience.
Key Features:
Runtime Compilation: The Split Plugin Loader dynamically compiles your plugin files as you write them, ensuring real-time efficiency and flexibility.
Streamlined File Management: With the freedom to name and organize your files as you see fit, the Split Plugin Loader ensures that everything culminates under the primary folder name, simplifying your project management.
Cross Build: Add directives [CARBON] or [OXIDE] to methods or top level variables and it will only build for your current name space. For usings you do //[CARBON] or //[OXIDE].
Broad Compatibility: Whether you're on Oxide or Carbon, the Split Plugin Loader has got you covered. Experience seamless integration with both platforms without a hitch.
Obfuscation Support(Coming Soon): Keep your code shielded. Planned obfuscation support aims to provide enhanced security, protecting your plugins against unauthorized access and tampering.
Automatic Code Formatting (Coming Soon): Guarantee code consistency across the board. Our upcoming automatic code formatting tool ensures your plugins maintain a clean and standardized code structure.
How to Use:
1. Install: Place the extension inside your carbon/extensions folder.
2. Setup: Create a new folder inside the splitplugins directory. Name this folder with your desired plugin name.
3. Plugin File Creation: Create your separate plugin files within this folder. Here's a simple guide using an example:
//splitplugins/MyHelloWorldPlugin/serverinit.cs: //[OXIDE] using Oxide.Core; //[CARBON] using Carbon.Core; namespace Oxide.Plugins { public partial class MyHelloWorldPlugin { private void OnServerInitialized() { TestLog(); } #region hello void Loaded() { Puts("Loaded2"); } #endregion [OXIDE] void OxideMethod(){ } [CARBON] void CarbonMethod(){ } } } //splitplugins/MyHelloWorldPlugin/declare.cs: using Oxide.Plugins; namespace Oxide.Plugins { [Info("MyHelloWorldPlugin", "Tsunderella", "1.0.0")] [Description("This is an example")] public partial class MyHelloWorldPlugin : CarbonPlugin { void Loaded() { Puts("Loaded"); } } } //splitplugins/MyHelloWorldPlugin/functions/testlog.cs: using Oxide.Plugins; using System.Text; namespace Oxide.Plugins { public partial class MyHelloWorldPlugin { private void TestLog() { Puts("hello world"); } } }
4. Output: Once the Split Plugin Loader processes these files at runtime, they are compiled into:
//plugins/MyHelloWorldPlugin.cs using Oxide.Plugins; using Oxide.Core; using System.Text; namespace Oxide.Plugins { [Info("MyHelloWorldPlugin", "Tsunderella", "1.0.0")] [Description("This is an example")] public class MyHelloWorldPlugin : RustPlugin { private void OnServerInitialized() { TestLog(); } #region hello void Loaded() { Puts("Loaded2"); Puts("Loaded"); } #endregion void OxideMethod(){ } private void TestLog() { Puts("hello world"); } } }
Obfuscator:
using Oxide.Plugins; namespace Oxide.Plugins { [FormatCode] //This will enable formatting(not implemented fully) [EnableBasicObfuscation] //This enables basic obfuscation [Info("MyHelloWorldPlugin", "Tsunderella", "1.0.0")] [Description("This is an example")] public class MyHelloWorldPlugin : RustPlugin { [DoNotObfuscate] //Don't obfuscate this variable public string shouldNotObfuscate = "hello"; private string shouldObfuscate = "world"; [DoNotObfuscateMethod] //Do not obfuscate the method name private void OnServerInitialized() { TestLog(); } [DoNotObfuscateMethod] //Do not obfuscate the method name void Loaded() { Puts("test2"); var hello = "world"; var world = "hello"; Puts("HelloWorld312"); } private void TestLog() { Puts("and even here2"); } [DoNotObfuscate]//Don't obfuscate anything in this method(unless it's calling a method that's been obfuscated void TestMethod2() { string testing = "hello"; } void TestMethod(string test) { shouldObfuscate = test; TestLog(); } } }
Output(This is just basic obfuscation for now):
using Oxide.Plugins;using System.Text;namespace Oxide.Plugins{[Info("MyHelloWorldPlugin", "Tsunderella", "1.0.0")][Description("This is an example")]public partial class MyHelloWorldPlugin : RustPlugin{public string shouldNotObfuscate = "hello";private string v_0055f67d = "world";private void OnServerInitialized(){m_a172963e();}void Loaded(){Puts("test2");var hello = "world";var world = "hello";Puts("HelloWorld312");}private void m_a172963e(){Puts("and even here2");}void TestMethod2(){string testing = "hello";}void m_c73515cb(string test){v_0055f67d = test;m_a172963e();}}}
Your feedback shapes the future. For any queries, challenges, or suggestions, our dedicated support team is eager to assist. Embrace the next level of Rust development with the Split Plugin Loader!
A Personal Note: Behind every piece of code there is a story. As someone who is heavily dyslexic, I found navigating through large code bases daunting. If you want to have this as a requirement or just to compile a large plugin and distribute the end result is up to you. I saw on the forums people where asking how to split plugins into multiple files and I personally think it's obnoxious splitting up a plugin into multiple plugins(except when it does more than one function) then you even have to wait for dependencies to load and what not.