Hey guys, I know this isnāt really an update but I wanted to make this for those of you who prefer using code to modify the explorer
All essential Jexplorer APIs are now exposed via shared.Jexplorer
which means you can make your own custom extension plugins for Jexplorer and do stuff like this!:
Heres some stuff to get you an idea of whatās contained within this new exposed api:
Types file (describes whatās contained within each module)
--!strict
local main = script.Parent
local utilities = main.Utilities
local ui = main.UI
local PluginUI = require(utilities.PluginUI)
local Style = require(utilities.Style)
local Group = require(utilities.Group)
local SimpleSignal = require(utilities.SimpleSignal)
local Jecs = require(main.Jecs)
type Signal<T... = ()> = SimpleSignal.SimpleSignal<T...>
export type WidgetState = {
World: World,
Connections: Group.Group,
Entities: {InstanceEntity},
Widget: DockWidgetPluginGui,
CurrentSelection: {InstanceEntity},
HierarchyVersion: number,
LastSelectedEntity: InstanceEntity?,
ContextTarget: InstanceEntity?,
CurrentlyRenaming: InstanceEntity?,
CurrentlyInserting: {Instance}?,
CurrentDrag: {
Connections: Group.Group,
Frame: typeof(ui.DragFrame),
Entities: {InstanceEntity}
}?,
JExplorerUI: typeof(ui.JExplorerUi),
}
export type StudioIconResult = {
Image: string,
ImageRectOffset: Vector2,
ImageRectSize: Vector2
}
export type InstanceFrame = {
Instance: typeof(ui.InstanceFrame),
Connections: Group.Group,
CurrentEntity: InstanceEntity?,
Assign: (InstanceFrame, entity: InstanceEntity?, parent: InstanceEntity?) -> (),
ReassignNametags: (InstanceFrame, newName: string, className: string) -> (),
ToggleSelection: (InstanceFrame, selected: boolean) -> (),
Reuse: (InstanceFrame) -> ()
}
export type World = Jecs.World
type SelectedComponent = Jecs.Id
type ExpandedComponent = Jecs.Id
type VisibleComponent = Jecs.Id
type IsQueriedComponent = Jecs.Id
type FrameComponent = Jecs.Id<InstanceFrame>
type ConnectionsComponent = Jecs.Id<Group.Group>
type InstanceComponent = Jecs.Id<Instance>
export type InstanceEntity = Jecs.Id
type Components = {
Selected: SelectedComponent,
Expanded: ExpandedComponent,
Instance: InstanceComponent,
Frame: FrameComponent,
Connections: ConnectionsComponent,
Invisible: VisibleComponent,
IsQueried: IsQueriedComponent
}
export type Manager = {
WidgetState: WidgetState,
Components: Components,
ContextMenus: {
Service: PluginMenu,
Instance: PluginMenu
},
ItemLists: {
InsertInstance: PluginUI.ItemList
},
Style: Style.Style,
InstanceToEntity: {[Instance]: InstanceEntity},
FrameToInstanceFrame: {[Instance]: InstanceFrame},
SelectionChanged: Signal<{InstanceEntity}>,
connectInputBegan: (fn: (input: InputObject) -> ()) -> (),
connectInputEnded: (fn: (input: InputObject) -> ()) -> (),
isKeyDown: (key: Enum.KeyCode) -> (boolean),
isInputActive: (input: Enum.UserInputType) -> (boolean),
getVisibleEntities: (world: World, parent: InstanceEntity?) -> {InstanceEntity},
getInstanceFrame: () -> InstanceFrame,
createInstanceEntity: (instance: Instance, parent: InstanceEntity?) -> InstanceEntity?,
getSetting: (name: string) -> any,
setInstanceFramePoolTarget: (n: number) -> (),
fillInstanceFramePoolToLimit: () -> (),
addEntitiesToSelection: (world: World, entities: {InstanceEntity}) -> (),
updateVirtualScroller: () -> (),
init: (onClose: () -> (), pluginVersion: string, connections: Group.Group) -> ()
}
export type StyleEditor = {
StyleEditorWidget: DockWidgetPluginGui,
init: (Manager: Manager, sheet: Style.Style) -> (),
}
export type SettingEditor = {
SettingEditorWidget: DockWidgetPluginGui,
getSetting: (Manager: Manager, name: string) -> any,
createSetting: (list: PluginUI.ItemList, settingName: string, displayName: string, valueType: string, defaultValue: any, onChange: ((newValue: any) -> ())?) -> (),
init: (Manager: Manager) -> (),
}
return nil
Hopefully Iāll be able to make a more indepth guide but I have some thingsi gotta do