Plugin
*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.
Plugin jest głównym obiektem odpowiedzialnym za tworzenie podstawowych wtyczek Studio, konsol do wtyczek, przycisków wtyczki i więcej. Jest to dostosowany dodatek do Studio, który dodaje nowe zachowanie i funkcje, które nie są zwykle włączone. Obiekt dodatek plug-inmożna uzyskać poprze
Przykłady kodu
assert(plugin, "This script must be run as a plugin!")
-- Code beyond this point will execute only if the script is run as a plugin
-- Load the module and pass the plugin reference
local pluginModule = require(script.Parent.PluginModule)
pluginModule:Initialize(plugin)
-- Verify if the plugin reference was initialized
pluginModule:CheckForPluginGlobal()
local pluginModule = {}
local plugin -- Local plugin reference
-- Initialize the plugin reference if not already set
function pluginModule:Initialize(pluginReference: Plugin)
if plugin ~= pluginReference then
plugin = pluginReference
else
error("Plugin is already initialized")
end
end
-- Check if the plugin reference is set and print out appropriate info
function pluginModule:CheckForPluginGlobal()
if plugin ~= nil then
print("Plugin reference is set!")
else
warn("Plugin reference is missing!")
end
end
return pluginModule
Podsumowanie
Właściwości
Wróщает, czy użytkownik włączył Collisions w studio pod zakładką Modele w sekcji Model.
Zwraca rozmiar ustawiony przez użytkownika w Studio.
Metody
Ustawia stan wtyczki do aktywacji.
- CreatePluginAction(actionId : string,text : string,statusTip : string,iconName : string,allowBinding : bool):PluginAction
Tworzy obiekt PluginAction, który jest obiektem, które reprezentuje genériczną akcję w Roblox Studio, bezpośrednio związaną z Toolbar lub Enum.Button.
Tworzy nowy menu wtyczek.
Tworzy nowy PluginToolbar z podanym nazwą.
Wyłącza dodatek plug-in.
Powoduje, że Enum.JointCreationMode użytkownika zostanie ustawiony w studio pod zakładką Modele.
Zwraca Mouse, który można używać podczas gdy plugin jest aktywny.
Zwraca obecnie wybrane Enum.RibbonTool .
Odzyskuje poprzednio zapisany wartość z podanym kluczem lub nil, jeśli podany klucz nie istnieje.
Wróщает prawdę, jeśli ten plugin jest obecnie aktywny, po tym jak został aktywowany za pomocą funkcji Plugin:Activate().
Wróщает prawdę, jeśli ten plugin jest obecnie aktywny za pomocą ekskluzywnej myszy, po aktywacji za pośrednictwem funkcji Plugin:Activate().
Odrzuca podane części i zwraca wynikające z tego NegateOperations.
Używany do otwarcia podanego instancji skryptu w oknie edytora, w Roblox Studio, na linii podanej. Jeśli nie jest podany żaden argument, to domyślnie będzie to 1.
Otwiera okienko pomocy kontekstowej na stronę wiki, do której łączy się url linkami.
Otwiera okno wysyłania dla aktualnej selekcji użytkownika.
Aktywuje określony narzędzie Roblox Studio.
Oddziela dane Operationy Związane i zwraca wynikające z nich części.
Przechowuje podany wartości dla późniejszego użycia pod podanym kluczem. Wartość ta będzie istnieć nawet po zamknięciu studia.
Rozpoczyna akcję przeciągania, pod warunkiem, że masz słownik parametrów.
Połącza podane części i w zwrotuje wynikające z nich operacje połączeń.
- CreateDockWidgetPluginGui(pluginGuiId : string,dockWidgetPluginGuiInfo : DockWidgetPluginGuiInfo):DockWidgetPluginGui
Tworzy DockWidgetPluginGui z DockWidgetPluginGuiInfo .
Prosi użytkownika o otwarcie pliku animacji .fbx, który może być załadowany na rigModel, a następnie wstawia animację jako KeyframeSequence w Workspace.
Prosi użytkownika o otwarcie pliku .fbx, wstawia poszczególne komponenty modelu jako siatki i generuje charakterystyczną rękawicę do użycia w animacja, która jest załadowana do Workspace.
Otwiera okno w Roblox Studio, które prosi użytkownika o wybór zasobu na podstawie assetType określonego. Wynika what assetId było wybrane, lub -1, jeśli okno zostało zamknięte.
Prosi użytkownika o zapisanie aktualnej selekcji z określonym nazwą pliku. Wynika prawdziwie, jeśli użytkownik zapisał plik.
Zdarzenia
Wystrzelony, gdy wtyczka jest dezaktywowana.
Wykonuje natychmiastowo przed tym, jak Plugin przestanie działać.
Właściwości
CollisionEnabled
Wróщает, czy użytkownik włączył Collisions w studio pod zakładką Modele w sekcji Model.
DisableUIDragDetectorDrags
GridSize
Zwraca rozmiar ustawiony w grze przez użytkownika w Studio pod Model lub Avatar zakładkach. Uwaga, że ta właściwość może mieć nieznaczne błędy zaokrąglenia; na przykład może być 0.0099999997764826 dla ustawienia 1 lub 0.4000000059
Metody
Activate
Funkcja ta ustawia stan wtyczki wezwującej na aktywny. Aktywowanie wtyczki umożliwia kontrolę za pomocą myszy poprzez metodę Plugin:GetMouse().
W dowolnym momencie jest 0 lub 1 aktywowanych wtyczek. Aktualizacja wtyczki spowoduje, że wszystkie inne wtyczki zostaną wyłączone (będą otrzymywać wydarzenie Plugin.Deactivation ).
Zobacz również:
- Plugin:IsActivatedWithExclusiveMouse() , zwraca prawdę, jeśli ten wtyczek jest obecnie aktywny za pomocą ekskluzywnej myszy, po aktywacji za pomocą tej funkcji
- Plugin.Unloading , uruchamia natychmiastowo przed usunięciem lub ponownym ładowaniem wtyczki za pośrednictwem odinstalowania, dezaktywowania lub aktualizacji
Parametry
Boolean określający czy aktywować wtyczkę za pomocą wyłącznej myszy. Jeśli tak, można uzyskać dostęp do PluginMouse za pośrednictwem Plugin:GetMouse().
Zwroty
CreatePluginAction
Funkcja ta tworzy PluginAction, która jest obiektem, który reprezentuje genériczną akcję wykonawczą w Roblox Studio, bezpośrednio nie powiązany z Toolbar lub Enum.Button. W Roblox Studio można przypisać klawisz skrótów klawiaturowych pod 2> File → Zaawansow
Gdy akcja jest uruchomiona, wydarzenie PluginAction.Triggered jest sygnalizowane.
Aby PluginActions działały tak, jak powinny, muszą być utworzone przy użyciu tej funkcji.
Zobacz również:
- PluginMenu , menu kontekstowe, które może być wyświetlone w Studio, które wyświetla listę PluginActions i wspiera podkatalogi
- Plugin:CreatePluginMenu() , tworzy PluginMenu
Parametry
Musi to być unikalna wartość, która identyfikuje tę akcję plugin'ową od innych.
Wyświetlany nazwa akcji.
Pokażone opis akcji.
Nazwa ikony używanej do wyświetlenia dodatek plug-in.
Czy PluginAction będzie ukryty z krótkiego widoku Studio. Przydatny dla działań kontekstowych. Domyślnie ustawiony na prawdę.
Zwroty
Przykłady kodu
local pluginAction = plugin:CreatePluginAction(
"HelloWorldAction",
"Hello World",
"Prints a 'Hello world!'",
"rbxasset://textures/sparkle.png",
true
)
pluginAction.Name = "Test Action"
local function actionTriggered()
print("Hello world!")
end
pluginAction.Triggered:Connect(actionTriggered)
CreatePluginMenu
Funkcja ta tworzy nowy PluginMenu, który jest menu kontekstowego, które może być wyświetlane w Studio, które wyświetla listę PluginActions i wspiera podkatalogi.
Aby PluginMenus działały tak, jak powinny, muszą one być utworzone przy użyciu tej funkcji.
Zobacz również:
- PluginAction , obiekt, który reprezentuje genériczną akcję do wykonania w Roblox Studio, bezpośrednio związaną z Toolbar lub Enum.Button .
- Plugin:CreatePluginAction() , tworzy PluginAction
- PluginMenu.Title , tekst do wyświetlenia podczas używania jako podrębnego menu
- PluginMenu.Icon , ikona do wyświetlenia podczas używania jako podrębnego menu
- PluginMenu:AddAction() , dodaje podany action do menu
- PluginMenu:AddNewAction() , tworzy tymczasową akcję, która jest ukryta z okienka Studio's Customize Skróty
- PluginMenu:AddMenu() , dodaje podany menu jako oddzielnik
- PluginMenu:AddSeparator() , dodaje separator między pozycjami w menu
- PluginMenu:Clear() , czyszczy menu
- PluginMenu:ShowAsync() , pokazuje menu przy kurсорze myszy. Wykonuje się do momentu wyboru przedmiotu lub zamknięcia menu. Wybrane działanie uruchamia jego Triggered wydarzenie
Parametry
Unikalne ID dla menu.
Tekst do wyświetlenia podczas używania jako podrzędnego menu.
Ikona do wyświetlenia podczas używania jako podmiotu menu.
Zwroty
Przykłady kodu
-- This code can be pasted into the command bar, but only once
local pluginMenu = plugin:CreatePluginMenu(math.random(), "Test Menu")
pluginMenu.Name = "Test Menu"
pluginMenu:AddNewAction("ActionA", "A", "rbxasset://textures/loading/robloxTiltRed.png")
pluginMenu:AddNewAction("ActionB", "B", "rbxasset://textures/loading/robloxTilt.png")
local subMenu = plugin:CreatePluginMenu(math.random(), "C", "rbxasset://textures/explosion.png")
subMenu.Name = "Sub Menu"
subMenu:AddNewAction("ActionD", "D", "rbxasset://textures/whiteCircle.png")
subMenu:AddNewAction("ActionE", "E", "rbxasset://textures/icon_ROBUX.png")
pluginMenu:AddMenu(subMenu)
pluginMenu:AddSeparator()
pluginMenu:AddNewAction("ActionF", "F", "rbxasset://textures/sparkle.png")
local toggle = Instance.new("BoolValue")
toggle.Name = "TogglePluginMenu"
toggle.Parent = workspace
local function onToggled()
if toggle.Value then
toggle.Value = false
local selectedAction = pluginMenu:ShowAsync()
if selectedAction then
print("Selected Action:", selectedAction.Text, "with ActionId:", selectedAction.ActionId)
else
print("User did not select an action!")
end
end
end
toggle.Changed:Connect(onToggled)
CreateToolbar
Funkcja CreateToolbar tworzy nowy PluginToolbar z podanym nazwą. Toolbar może następnie być używany do tworzenia przycisków plugin.
Parametry
Widoczny tekst na pasku narzędzi, oznaczający grupę przycisków zawartych w środku.
Zwroty
Przykłady kodu
plugin:CreateToolbar("ExampleToolbar")
Deactivate
Dezaktywuje dodatek plug-in. To spowoduje odłączenie powiązanego PluginMouse jeśli została aktywowana
Zobacz również:
- Plugin:Activate() , ustawia stan wtyczki do aktywacji
- Plugin.Deactivation , działa kiedy wtyczka jest wyłączona
- Plugin.Unloading , uruchamia natychmiastowo przed usunięciem lub ponownym ładowaniem wtyczki za pośrednictwem odinstalowania, dezaktywowania lub aktualizacji
Zwroty
GetJoinMode
Powoduje, że Enum.JointCreationMode użytkownika zostanie ustawiony w studio pod zakładką Modele.
Zwroty
GetMouse
GetMouse zwraca PluginMouse, który można używać podczas gdy plugin jest aktywny poprzez Plugin:Activate() .
Zwroty
Przykłady kodu
local mouse = plugin:GetMouse()
local function button1Down()
print("Button 1 pressed from PluginMouse")
end
mouse.Button1Down:Connect(button1Down)
GetSelectedRibbonTool
GetSelectedRibbonTool return the currently selected Enum.RibbonTool . It returns an Enum that corresponds to a particular tool. This will return whether the tool is selected manually or programmatically via Plugin:SelectRibbonTool() .
Zwroty
Przykłady kodu
plugin:SelectRibbonTool(Enum.RibbonTool.Move, UDim2.new())
task.wait() -- wait for next frame
local selectedRibbonTool = plugin:GetSelectedRibbonTool()
print("The selected RibbonTool is", selectedRibbonTool)
GetSetting
Odzyskuje poprzednio zapisany wartość z podanym kluczem lub nil, jeśli podany klucz nie istnieje.
Ponieważ wiele instancji tego samego plugin'a może być uruchomionych równocześnie (na przykład, jeśli wiele okien Studio jest otwartych), nie powinieneś zależeć od tego, czy ten wartość pozostaje taki sam w ciągu czasu. Inne instancje plugin'a mogą aktualizować ustawienia w dowolnym momencie.
Ten wezwanie może nie powodować skutku i zwrócić nil , jeśli wiele instancji tego samego plugin'a czyta i pisze dane. Jeśli twoja wtyczka oczekuje, że będzie pisać do ustawień często, powinieneś ponownie sprawdzić wartość zwróconą po tym krótkim czasie, aby rozróżnić pomiędzy ustawieniem tymczasowo niedostępnym a ustawieniem nieistniejącym.
Parametry
Zwroty
Przykłady kodu
local RAN_BEFORE_KEY = "RanBefore"
local didRunBefore = plugin:GetSetting(RAN_BEFORE_KEY)
if didRunBefore then
print("Welcome back!")
else
plugin:SetSetting(RAN_BEFORE_KEY, true)
print("Welcome! Thanks for installing this plugin!")
end
IsActivated
Funkcja ta zwraca prawdę, jeśli ta wtyczka jest obecnie aktywna, po aktywacji poprzez funkcję Plugin:Activate().
Zwroty
Boolean wskazujący, czy plugin jest obecnie aktywny.
IsActivatedWithExclusiveMouse
Funkcja ta zwraca prawdziwy, jeśli ta wtyczka jest obecnie aktywna za pomocą ekskluzywnej myszy, po zostanie aktywowana za pośrednictwem funkcji Plugin:Activate(). Jeśli ta funkcja zwraca prawdziwy, można odzyskać PluginMouse poprzez funkcję Plugin:GetMouse().
Zobacz również:
- Plugin.Deactivation , działa kiedy wtyczka jest wyłączona
- Plugin.Unloading , uruchamia natychmiastowo przed usunięciem lub ponownym ładowaniem wtyczki za pośrednictwem odinstalowania, dezaktywowania lub aktualizacji
Zwroty
Czy ten plugin jest obecnie aktywny za pomocą wyłącznej myszy.
Negate
Odrzuca podane części i zwraca wynikające z tego NegateOperations.
Parametry
Zwroty
OpenScript
Używany do otwarcia podanego instancji skryptu w oknie edytora, w Roblox Studio, na linii podanej. Jeśli nie jest podany żaden argument, to domyślnie będzie to 1.
Parametry
Zwroty
Przykłady kodu
local newScript = Instance.new("Script")
newScript.Parent = workspace
plugin:OpenScript(newScript)
OpenWikiPage
Otwiera okienko pomocy kontekstowej na stronę wiki, do której łączy się url linkami.
Parametry
Zwroty
Przykłady kodu
plugin:OpenWikiPage("API:Class/BasePart")
SaveSelectedToRoblox
Otwiera okno wysyłania dla aktualnej selekcji użytkownika.
Zwroty
SelectRibbonTool
Aktywuje określony narzędzie Roblox Studio. Jeśli narzędzie otwiera okno, parametr pozycji określa, gdzie powinno być wyświetlone na ekranie.
Notatka:
- Należy wybrać obiekt, aby to działało poprawnie.
- Zmienianie poli skalowych właściwości position nie wpływa na okienka dialogową.
Parametry
Zwroty
Separate
Oddziela dane Operationy Związane i zwraca wynikające z nich części.
Parametry
Zwroty
SetSetting
Przechowuje podany wartości dla późniejszego użycia pod podanym kluczem. Wartość będzie istnieć nawet po zamknięciu Roblox Studio. Te ustawienia są zapisane w formie JSON jako mapa z kluczami strungowymi. Arrays są automatycznie konwertowane na mapy poprzez przekonwertowanie kluczowych liczb na strzykawki pierwsze.
Uwaga, że format JSON narzuca dodatkowe ograniczenia, w tym następujące znaki, które mogą uszkodzić plik ustawień:
- Backslashes ( \ ) w kluczach lub wartościach, w szczególności ucieczkowe cytaty ( \" ).
- Nowe linijki ( \n ) w kluczach.
- Cytaty ( " ) w kluczach.
- Okresy ( ) w kluczach.
Ten wezwany może cicho nie powodować, jeśli wiele instancji tego samego plugin'a czyta i pisze dane. Jeśli twoja wtyczka oczekuje, że będzie często pisać do ustawień, możesz sprawdzić, że dane zostały właściwie napisane, wykonując Plugin:GetSetting() .
Parametry
Zwroty
Przykłady kodu
local RAN_BEFORE_KEY = "RunBefore"
local hasRunBefore = plugin:GetSetting(RAN_BEFORE_KEY)
if hasRunBefore then
print("Welcome back!")
else
print("Thanks for installing this plugin!")
plugin:SetSetting(RAN_BEFORE_KEY, true)
end
StartDrag
Zacznij przeciągnąć inicjuje akcję przeciągania używając słownika parametrów. Parametry są następujące:
<tbody><tr><td><b>Nadawca</b></td><td>ciąg</td><td><code>""</code></td><td>Określa źródło akcji przeciągnięcia do celu upuszczenia</td></tr><tr><td><b>MimeType</b></td><td>ciąg</td><td><code>""</code></td><td>Typ <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types">MIM</a> . <b>Danych</b> .</td></tr><tr><td><b>Dane</b></td><td>ciąg</td><td><code>""</code></td><td>Informacje o akcjiprzeciągania, na przykład co jest przeciągane. Powinno być używane przez cel przeciągania.</td></tr><tr><td><b>Ikona myszy</b></td><td><code>Datatype.Content</code></td><td><code>""</code></td><td>Ikona do użycia za kursorem myszy podczas przeciągania. Jeśli jest pusta, używa kursora domyślnego.</td></tr><tr><td><b>Przeciągnij ikone</b></td><td><code>Datatype.Content</code></td><td><code>""</code></td><td>Zdjęcie do renderowania podczas przeciągania kursorem myszy. Powinno to przedstawiać przedmiot, który jest przeciągany.</td></tr><tr><td><b>HotSpot</b></td><td><code>Datatype.Vector2</code></td><td><code>Datatype.Vector2.new(0, 0)</code></td><td>Odległość pikselowa z lewej góry, gdzie kursor powinien "przytrzymać" <b>DragIcon</b>.</td></tr></tbody>
Nazwa | Typ | Domyślny | Opis |
---|
Zobacz również:
Parametry
Zwroty
Przykłady kodu
assert(plugin, "This script must be run as a Studio plugin")
local widgetInfo = DockWidgetPluginGuiInfo.new(Enum.InitialDockState.Float, true, true, 300, 200)
local dragSourceWidget = plugin:CreateDockWidgetPluginGui("Drag Source", widgetInfo)
dragSourceWidget.Title = "Drag Source"
local textBox = Instance.new("TextBox")
textBox.Parent = dragSourceWidget
textBox.Size = UDim2.new(1, 0, 0, 32)
textBox.Text = "Hello, plugin drags"
local dragButton = Instance.new("TextButton")
dragButton.Size = UDim2.new(1, 0, 1, -32)
dragButton.Position = UDim2.new(0, 0, 0, 32)
dragButton.Text = "Edit the text above, then start drag here"
dragButton.Parent = dragSourceWidget
function onMouseButton1Down()
local dragData = {
Sender = "SomeDragSource",
MimeType = "text/plain",
Data = textBox.Text,
MouseIcon = "",
DragIcon = "",
HotSpot = Vector2.new(0, 0),
}
plugin:StartDrag(dragData)
end
dragButton.MouseButton1Down:Connect(onMouseButton1Down)
-- This widget will receive drops
local dragTargetWidget = plugin:CreateDockWidgetPluginGui("Drop Target", widgetInfo)
dragTargetWidget.Title = "Drop Target"
-- This TextLabel will display what was dropped
local textLabel = Instance.new("TextLabel")
textLabel.Size = UDim2.new(1, 0, 1, 0)
textLabel.Text = "Drop here..."
textLabel.Parent = dragTargetWidget
local function onDragDrop(dragData)
if dragData.MimeType == "text/plain" then
textLabel.Text = dragData.Data
else
textLabel.Text = dragData.MimeType
end
end
dragTargetWidget.PluginDragDropped:Connect(onDragDrop)
dragTargetWidget.PluginDragEntered:Connect(function(_dragData)
print("PluginDragEntered")
end)
dragTargetWidget.PluginDragLeft:Connect(function(_dragData)
print("PluginDragLeft")
end)
dragTargetWidget.PluginDragMoved:Connect(function(_dragData)
print("PluginDragMoved")
end)
Union
Połącza podane części i w zwrotuje wynikające z nich operacje połączeń.
Parametry
Zwroty
CreateDockWidgetPluginGui
CreateDockWidgetPluginGui tworzy nowy DockWidgetPluginGui z danej DockWidgetPluginGuiInfo . Pierwszy parametr, 0> uginGuiId0>, powinien być unikalną i spójną ciąg. Jest używany do zapisu stanu docka widżetu i innych wewnętrznych szczegółów.
Parametry
Unikalny i spójny identyfikator używany do przechowywania stanu dokockowania widżetu i innych wewnętrznych szczegółów.
Opisuje DockWidgetPluginGui aby stworzyć (początkowy stan, rozmiar itp).
Zwroty
Przykłady kodu
-- Create new 'DockWidgetPluginGuiInfo' object
local widgetInfo = DockWidgetPluginGuiInfo.new(
Enum.InitialDockState.Float, -- Widget will be initialized in floating panel
true, -- Widget will be initially enabled
false, -- Don't override the previous enabled state
200, -- Default width of the floating window
300, -- Default height of the floating window
150, -- Minimum width of the floating window (optional)
150 -- Minimum height of the floating window (optional)
)
-- Create new widget GUI
local testWidget = plugin:CreateDockWidgetPluginGui("TestWidget", widgetInfo)
local testButton = Instance.new("TextButton")
testButton.BorderSizePixel = 0
testButton.TextSize = 20
testButton.TextColor3 = Color3.new(1, 0.2, 0.4)
testButton.AnchorPoint = Vector2.new(0.5, 0.5)
testButton.Size = UDim2.new(1, 0, 1, 0)
testButton.Position = UDim2.new(0.5, 0, 0.5, 0)
testButton.SizeConstraint = Enum.SizeConstraint.RelativeYY
testButton.Text = "Click Me"
testButton.Parent = testWidget
ImportFbxAnimation
Ta funkcja prosi użytkownika o otwarcie pliku animacji .fbx, który może być załadowany na rigModel , a następnie wstawić animację jako KeyframeSequence w Workspace.
Parametry
Zwroty
ImportFbxRig
Prosi użytkownika o otwarcie pliku .fbx, wstawia poszczególne komponenty modelu jako siatki i generuje charakterystyczną rękawicę do użycia w animacja, która jest załadowana do Workspace.
Parametry
Zwroty
PromptForExistingAssetId
Otwiera okno w Roblox Studio, które prosi użytkownika o wybór zasobu na podstawie assetType określonego. Wynika what assetId było wybrane, lub -1, jeśli okno zostało zamknięte.
Parametry
Zwroty
Zdarzenia
Deactivation
Wystąpił, gdy Plugin został dezaktywowany. To się dzieje, gdy kod plugin'a wzywa Plugin:Deactivate() lub ponieważ kiedyś inny plugin wzywa Plugin:Activate(), co zmusza wszystkie inne plugin do utraty ich aktywnego stanu.
Zobacz również:
- Plugin.Unloading , uruchamia natychmiastowo przed usunięciem lub ponownym ładowaniem wtyczki za pośrednictwem odinstalowania, dezaktywowania lub aktualizacji
Unloading
Ten ewent zostanie natychmiastowo wykonany, zanim Plugin przestanie działać. Plugins są odłączane, odinstalowane, otrzymują aktualizację lub zamykają się.
Pozwala pluginowi na czyszczenie się po sobie, zanim jego skrypty przestają działać, na przykład, aby usunąć niepotrzebne instancje z DataModel. Jeśli plugin nie czyszczy się prawidłowo, stare kopie pozostaną. Gdy to się zdarza, użytkownicy mogą zostać zmuszeni do zamknięcia i ponownego otwarcia miejsca, co jest złym doświadczeniem użytkownika.
Instancje pluginowe, takie jak PluginToolbarButtons, DockWidgetPluginGuis i PluginGuis są automatycznie czyszczone, gdy plugin zostanie załadowany, więc nie jest konieczne ich usuwanie.