local g="\078\101\120\117\115\080\108\117\103\105\110"local A=(require(script.Parent.Parent:WaitForChild("\078\101\120\117\115\080\108\117\103\105\110\070\114\097\109\101\119\111\114\107\080\114\111\106\101\099\116"))):GetContext(script)local I=A:GetResource("\066\097\115\101\046\078\101\120\117\115\067\111\110\116\097\105\110\101\114")local O=A:GetResource("\080\108\117\103\105\110\046\078\101\120\117\115\083\116\117\100\105\111\084\104\101\109\101")local Y=A:GetResource("\078\101\120\117\115\073\110\115\116\097\110\099\101\046\069\118\101\110\116\046\078\101\120\117\115\069\118\101\110\116\067\114\101\097\116\111\114")local z=I:Extend()z:SetClassName(g)A:SetContextResource(z)local q=plugin function z.GetPlugin()if not q then q=z.new()end return q end function z.SetPlugin(g)q=g end function z.__new(A)A:InitializeSuper()A.Name=g A.CollisionEnabled=true A.GridSize=1 A.Deactivation=Y:CreateEvent()A.Unloading=Y:CreateEvent()end function z.Activate(A,g)warn("\085\110\105\109\112\108\101\109\101\110\116\101\100\058 \078\101\120\117\115\080\108\117\103\105\110\058\065\099\116\105\118\097\116\101\040\069\120\099\108\117\115\105\118\101\077\111\117\115\101\041")end function z.CreateDockWidgetPluginGui(I,g,A)error("\085\110\105\109\112\108\101\109\101\110\116\101\100\058 \078\101\120\117\115\080\108\117\103\105\110\058\067\114\101\097\116\101\068\111\099\107\087\105\100\103\101\116\080\108\117\103\105\110\071\117\105\040\080\108\117\103\105\110\071\117\105\073\100\044\087\105\100\103\101\116\080\108\117\103\105\110\071\117\105\073\110\102\111\041")end function z.CreatePluginAction(z,g,A,I,O,Y)error("\085\110\105\109\112\108\101\109\101\110\116\101\100\058 \078\101\120\117\115\080\108\117\103\105\110\058\067\114\101\097\116\101\080\108\117\103\105\110\065\099\116\105\111\110\040\065\099\116\105\111\110\073\100\044\084\101\120\116\044\083\116\097\116\117\115\084\105\112\044\073\099\111\110\078\097\109\101\044\065\108\108\111\119\066\105\110\100\105\110\103\041")end function z.CreatePluginMenu(O,g,A,I)error("\085\110\105\109\112\108\101\109\101\110\116\101\100\058 \078\101\120\117\115\080\108\117\103\105\110\058\067\114\101\097\116\101\080\108\117\103\105\110\077\101\110\117\040\073\100\044\084\105\116\108\101\044\073\099\111\110\041")end function z.CreateToolbar(A,g)error("\085\110\105\109\112\108\101\109\101\110\116\101\100\058 \078\101\120\117\115\080\108\117\103\105\110\058\067\114\101\097\116\101\084\111\111\108\098\097\114\040\078\097\109\101\041")end function z.Deactivate(g)warn("\085\110\105\109\112\108\101\109\101\110\116\101\100\058 \078\101\120\117\115\080\108\117\103\105\110\058\068\101\097\099\116\105\118\097\116\101\040\041")end function z.GetJoinMode(g)warn("\085\110\105\109\112\108\101\109\101\110\116\101\100\058 \078\101\120\117\115\080\108\117\103\105\110\058\071\101\116\074\111\105\110\077\111\100\101\040\041")return Enum.JointCreationMode.Surface end function z.GetMouse(g)error("\085\110\105\109\112\108\101\109\101\110\116\101\100\058 \078\101\120\117\115\080\108\117\103\105\110\058\071\101\116\077\111\117\115\101\040\041")end function z.GetSelectedRibbonTool(g)error("\085\110\105\109\112\108\101\109\101\110\116\101\100\058 \078\101\120\117\115\080\108\117\103\105\110\058\071\101\116\083\101\108\101\099\116\101\100\082\105\098\098\111\110\084\111\111\108\040\041")end function z.GetSetting(A,g)error("\085\110\105\109\112\108\101\109\101\110\116\101\100\058 \078\101\120\117\115\080\108\117\103\105\110\058\071\101\116\083\101\116\116\105\110\103\040\075\101\121\041")end function z.GetStudioUserId(g)error("\085\110\105\109\112\108\101\109\101\110\116\101\100\058 \078\101\120\117\115\080\108\117\103\105\110\058\071\101\116\083\116\117\100\105\111\085\115\101\114\073\100\040\041")end function z.ImportFbxAnimation(I,g,A)error("\085\110\105\109\112\108\101\109\101\110\116\101\100\058 \078\101\120\117\115\080\108\117\103\105\110\058\073\109\112\111\114\116\070\098\120\065\110\105\109\097\116\105\111\110\040\082\105\103\077\111\100\101\108\044\073\115\082\049\053\041")end function z.ImportFbxRig(A,g)error("\085\110\105\109\112\108\101\109\101\110\116\101\100\058 \078\101\120\117\115\080\108\117\103\105\110\058\073\109\112\111\114\116\070\098\120\082\105\103\040\073\115\082\049\053\041")end function z.IsActivated(g)error("\085\110\105\109\112\108\101\109\101\110\116\101\100\058 \078\101\120\117\115\080\108\117\103\105\110\058\073\115\065\099\116\105\118\097\116\101\100\040\041")end function z.IsActivatedWithExclusiveMouse(g)error("\085\110\105\109\112\108\101\109\101\110\116\101\100\058 \078\101\120\117\115\080\108\117\103\105\110\058\073\115\065\099\116\105\118\097\116\101\100\087\105\116\104\069\120\099\108\117\115\105\118\101\077\111\117\115\101\040\041")end function z.Negate(A,g)error("\085\110\105\109\112\108\101\109\101\110\116\101\100\058 \078\101\120\117\115\080\108\117\103\105\110\058\078\101\103\097\116\101\040\079\098\106\101\099\116\115\041")end function z.OpenScript(I,g,A)error("\085\110\105\109\112\108\101\109\101\110\116\101\100\058 \078\101\120\117\115\080\108\117\103\105\110\058\079\112\101\110\083\099\114\105\112\116\040\083\099\114\105\112\116\044\076\105\110\101\078\117\109\098\101\114\041")end function z.OpenWikiPage(A,g)error("\085\110\105\109\112\108\101\109\101\110\116\101\100\058 \078\101\120\117\115\080\108\117\103\105\110\058\079\112\101\110\087\105\107\105\080\097\103\101\040\085\082\076\041")end function z.PromptForExistingAssetId(A,g)error("\085\110\105\109\112\108\101\109\101\110\116\101\100\058 \078\101\120\117\115\080\108\117\103\105\110\058\080\114\111\109\112\116\070\111\114\069\120\105\115\116\105\110\103\065\115\115\101\116\073\100\040\065\115\115\101\116\084\121\112\101\041")end function z.PromptSaveSelection(A,g)error("\085\110\105\109\112\108\101\109\101\110\116\101\100\058 \078\101\120\117\115\080\108\117\103\105\110\058\080\114\111\109\112\116\083\097\118\101\083\101\108\101\099\116\105\111\110\040\083\117\103\103\101\115\116\101\100\070\105\108\101\078\097\109\101\041")end function z.SaveSelectedToRoblox(g)error("\085\110\105\109\112\108\101\109\101\110\116\101\100\058 \078\101\120\117\115\080\108\117\103\105\110\058\083\097\118\101\083\101\108\101\099\116\101\100\084\111\082\111\098\108\111\120\040\041")end function z.SelectRibbonTool(I,g,A)error("\085\110\105\109\112\108\101\109\101\110\116\101\100\058 \078\101\120\117\115\080\108\117\103\105\110\058\083\101\108\101\099\116\082\105\098\098\111\110\084\111\111\108\040\084\111\111\108\044\080\111\115\105\116\105\111\110\041")end function z.Separate(A,g)error("\085\110\105\109\112\108\101\109\101\110\116\101\100\058 \078\101\120\117\115\080\108\117\103\105\110\058\083\101\112\097\114\097\116\101\040\079\098\106\101\099\116\115\041")end function z.SetSetting(I,g,A)error("\085\110\105\109\112\108\101\109\101\110\116\101\100\058 \078\101\120\117\115\080\108\117\103\105\110\058\083\101\116\083\101\116\116\105\110\103\040\075\101\121\044\086\097\108\117\101\041")end function z.Union(A,g)error("\085\110\105\109\112\108\101\109\101\110\116\101\100\058 \078\101\120\117\115\080\108\117\103\105\110\058\085\110\105\111\110\040\079\098\106\101\099\116\115\041")end return z
--[[
TheNexusAvenger

Mirrors the API of Roblox's Plugin class.
--]]

local CLASS_NAME = "NexusPlugin"



local NexusPluginFramework = require(script.Parent.Parent:WaitForChild("NexusPluginFrameworkProject")):GetContext(script)
local NexusContainer = NexusPluginFramework:GetResource("Base.NexusContainer")
local NexusStudioTheme = NexusPluginFramework:GetResource("Plugin.NexusStudioTheme")
local NexusEventCreator = NexusPluginFramework:GetResource("NexusInstance.Event.NexusEventCreator")

local NexusPlugin = NexusContainer:Extend()
NexusPlugin:SetClassName(CLASS_NAME)
NexusPluginFramework:SetContextResource(NexusPlugin)

local CachedPlugin = plugin



--[[
Returns a static plugin instance. Note it may not be
a "mock" plugin (NexusPlugin).
--]]
function NexusPlugin.GetPlugin()
	--Craete the cached plugin if needed.
	if not CachedPlugin then
		CachedPlugin = NexusPlugin.new()
	end
	
	--Return the cached plugin.
	return CachedPlugin
end

--[[
Sets the static plugin instance. Needed to be
used in a Script since plugin is not defined
in ModuleScripts, even if it required by a plugin
Script.
--]]
function NexusPlugin.SetPlugin(NewPlugin)
	CachedPlugin = NewPlugin
end

--[[
Creates a Nexus Plugin object.
--]]
function NexusPlugin:__new()
	self:InitializeSuper()
	self.Name = CLASS_NAME
	
	self.CollisionEnabled = true
	self.GridSize = 1
	
	self.Deactivation = NexusEventCreator:CreateEvent()
	self.Unloading = NexusEventCreator:CreateEvent()
end

--[[
Sets the state of the calling plugin to activated.
--]]
function NexusPlugin:Activate(ExclusiveMouse)
	warn("Unimplemented: NexusPlugin:Activate(ExclusiveMouse)")
end

--[[
This function creates a DockWidgetPluginGui using the
	provided DockWidgetPluginGuiInfo.
--]]
function NexusPlugin:CreateDockWidgetPluginGui(PluginGuiId,WidgetPluginGuiInfo)
	error("Unimplemented: NexusPlugin:CreateDockWidgetPluginGui(PluginGuiId,WidgetPluginGuiInfo)")
end

--[[
Creates a PluginAction which is an object that represents
a generic performable action in Roblox Studio, with no
directly associated Toolbar or Button.
--]]
function NexusPlugin:CreatePluginAction(ActionId,Text,StatusTip,IconName,AllowBinding)
	error("Unimplemented: NexusPlugin:CreatePluginAction(ActionId,Text,StatusTip,IconName,AllowBinding)")
end

--[[
Creates a new plugin menu.
--]]
function NexusPlugin:CreatePluginMenu(Id,Title,Icon)
	error("Unimplemented: NexusPlugin:CreatePluginMenu(Id,Title,Icon)")
end

--[[
Gets or creates a new Toolbar with the specified name,
which is then used to create a plugin button.
--]]
function NexusPlugin:CreateToolbar(Name)
	error("Unimplemented: NexusPlugin:CreateToolbar(Name)")
end

--[[
Deactivates the plugin.
--]]
function NexusPlugin:Deactivate()
	warn("Unimplemented: NexusPlugin:Deactivate()")
end

--[[
Returns the JointCreationMode the user has set in studio
under the Model tab.
--]]
function NexusPlugin:GetJoinMode()
	warn("Unimplemented: NexusPlugin:GetJoinMode()")
	return Enum.JointCreationMode.Surface
end

--[[
Returns a mouse that can be used with the plugin.
--]]
function NexusPlugin:GetMouse()
	error("Unimplemented: NexusPlugin:GetMouse()")
end

--[[
Returns the currently selected RibbonTool.
--]]
function NexusPlugin:GetSelectedRibbonTool()
	error("Unimplemented: NexusPlugin:GetSelectedRibbonTool()")
end

--[[
Retrieves a previously stored value with the given key,
or nil if the given key doesn’t exist.
--]]
function NexusPlugin:GetSetting(Key)
	error("Unimplemented: NexusPlugin:GetSetting(Key)")
end

--[[
Returns the studio user’s userId if they’re logged in,
otherwise returns 0.
--]]
function NexusPlugin:GetStudioUserId()
	error("Unimplemented: NexusPlugin:GetStudioUserId()")
end

--[[
Prompts the user to open a .fbx animation file that can
be loaded onto the rigModel, then proceeds to insert the
animation as a KeyframeSequence in the Workspace.
--]]
function NexusPlugin:ImportFbxAnimation(RigModel,IsR15)
	error("Unimplemented: NexusPlugin:ImportFbxAnimation(RigModel,IsR15)")
end

--[[
Prompts the user to open a .fbx file, uploads the individual
components of the model as meshes, and generates a character
rig for use in animation, which is loaded into the Workspace.
--]]
function NexusPlugin:ImportFbxRig(IsR15)
	error("Unimplemented: NexusPlugin:ImportFbxRig(IsR15)")
end

--[[
Returns true if this plugin is currently active, after having
been activated via the Plugin:Activate function.
--]]
function NexusPlugin:IsActivated()
	error("Unimplemented: NexusPlugin:IsActivated()")
end

--[[
Returns true if this plugin is currently active with an
exclusive mouse, after having been activated via the
Plugin:Activate function.
--]]
function NexusPlugin:IsActivatedWithExclusiveMouse()
	error("Unimplemented: NexusPlugin:IsActivatedWithExclusiveMouse()")
end

--[[
Negates the given parts and returns the resulting
NegateOperations.
--]]
function NexusPlugin:Negate(Objects)
	error("Unimplemented: NexusPlugin:Negate(Objects)")
end

--[[
Used to open the given script instance in an editor window,
in Roblox studio, at the given line. If no line is given
as an argument it will default to 0.
--]]
function NexusPlugin:OpenScript(Script,LineNumber)
	error("Unimplemented: NexusPlugin:OpenScript(Script,LineNumber)")
end

--[[
Opens the context help window to the wiki page that url
links to.
--]]
function NexusPlugin:OpenWikiPage(URL)
	error("Unimplemented: NexusPlugin:OpenWikiPage(URL)")
end

--[[
Opens a window in Roblox Studio, which prompts the user to
select an asset based on the assetType specified. Returns
what assetId was selected, or -1 if the window was closed.
--]]
function NexusPlugin:PromptForExistingAssetId(AssetType)
	error("Unimplemented: NexusPlugin:PromptForExistingAssetId(AssetType)")
end

--[[
Prompts the user to save their current selection with the
specified file name. Returns true if the user did save the file.
--]]
function NexusPlugin:PromptSaveSelection(SuggestedFileName)
	error("Unimplemented: NexusPlugin:PromptSaveSelection(SuggestedFileName)")
end

--[[
Opens an upload window for the user’s current selection.
--]]
function NexusPlugin:SaveSelectedToRoblox()
	error("Unimplemented: NexusPlugin:SaveSelectedToRoblox()")
end

--[[
Activates the specified Roblox Studio tool.
--]]
function NexusPlugin:SelectRibbonTool(Tool,Position)
	error("Unimplemented: NexusPlugin:SelectRibbonTool(Tool,Position)")
end

--[[
Separates the given UnionOperations and returns the resulting parts.
--]]
function NexusPlugin:Separate(Objects)
	error("Unimplemented: NexusPlugin:Separate(Objects)")
end

--[[
Stores a given value for later use under the given key. The value
will persist even after studio is closed.
--]]
function NexusPlugin:SetSetting(Key,Value)
	error("Unimplemented: NexusPlugin:SetSetting(Key,Value)")
end

--[[
Unions the given parts and returns the resulting UnionOperation.
--]]
function NexusPlugin:Union(Objects)
	error("Unimplemented: NexusPlugin:Union(Objects)")
end



return NexusPlugin