From 6021205f1c0313498fe3fdf16fefc1c67e68f686 Mon Sep 17 00:00:00 2001 From: TechTastic <74630543+TechTastic@users.noreply.github.com> Date: Fri, 1 May 2026 17:32:42 -0500 Subject: [PATCH 1/8] Adding KubeJSable to Addons --- wiki/addons/kubejsable/en.yml | 10 +++ wiki/addons/kubejsable/meta.yml | 6 ++ wiki/addons/kubejsable/page.kubedoc | 126 ++++++++++++++++++++++++++++ 3 files changed, 142 insertions(+) create mode 100644 wiki/addons/kubejsable/en.yml create mode 100644 wiki/addons/kubejsable/meta.yml create mode 100644 wiki/addons/kubejsable/page.kubedoc diff --git a/wiki/addons/kubejsable/en.yml b/wiki/addons/kubejsable/en.yml new file mode 100644 index 00000000..19a4b970 --- /dev/null +++ b/wiki/addons/kubejsable/en.yml @@ -0,0 +1,10 @@ +title: "KubeJSable" +description: "KubeJS x Sable" + +events-tab-key: "Events" +bindings-tab-key: "Bindings" + +common-tab-key: "Common" +server-tab-key: "Server" +client-tab-key: "Client" +startup-tab-key: "Startup" \ No newline at end of file diff --git a/wiki/addons/kubejsable/meta.yml b/wiki/addons/kubejsable/meta.yml new file mode 100644 index 00000000..b7055c13 --- /dev/null +++ b/wiki/addons/kubejsable/meta.yml @@ -0,0 +1,6 @@ +author: "EDAD51BB" +addon: "third-party" +versions: "1211" +download-curseforge: "kubejsable" +download-modrinth: "kubejsable" +download-github: "TechTastic/KubeJSable" \ No newline at end of file diff --git a/wiki/addons/kubejsable/page.kubedoc b/wiki/addons/kubejsable/page.kubedoc new file mode 100644 index 00000000..d652d3fd --- /dev/null +++ b/wiki/addons/kubejsable/page.kubedoc @@ -0,0 +1,126 @@ +KubeJSable is a KubeJS addon for interacting with Sable! This includes multiple new bindings and access to Sable events! + +|>+ {events-tab-key} +# PhysicsEvents +## Pre +This event is fired from `ForgeSablePrePhysicsTickEvent` just before the next physics tick. +The event object itself includes a `SubLevelPhysicsSystem` (`physicsSystem`) instance and a `timeStep` value. +>>> info +This event still fires when the physics engine in a world is paused! +<<< +```javascript +PhysicsEvents.ready(event => { + console.info("Pre-Physics Tick!") +}) +``` +## Post +This event is fired from `ForgeSablePostPhysicsTickEvent` just after the last physics tick. +The event object itself includes a `SubLevelPhysicsSystem` (`physicsSystem`) instance and a `timeStep` value. +>>> info +This event still fires when the physics engine in a world is paused! +<<< +```javascript +PhysicsEvents.post(event => { + console.info("Post-Physics Tick!") +}) +``` +## Ready +This event is fired from `ForgeSableSubLevelContainerReadyEvent` whenever a `SubLevelContainer` is readied. +The event object itself includes a `Level` (`level`) instance and a `SubLevelContainer` (`subLevelContainer`) instance. +```javascript +PhysicsEvents.ready(event => { + console.info("Sub-Level Container Ready!") +}) +``` +<||> {bindings-tab-key} +>| {common-tab-key}+ +# Sable +- getAllIntersecting(level: Level, bounds: BoundingBox3dc): Iterable +- getContaining(level: Level, chunkX: int, chunkZ: int): SubLevel +- getContaining(level: Level, chunkPos: ChunkPos): SubLevel +- getContaining(level: Level, pos: SectionPos): SubLevel +- getContaining(level: Level, pos: Vec3i): SubLevel +- getContaining(level: Level, pos: Position): SubLevel +- getContaining(level: Level, pos: Vector3dc): SubLevel +- getContaining(level: Level, blockX: double, blockZ: double): SubLevel +- getContaining(entity: Entity): SubLevel +- getContaining(blockEntity: BlockEntity): SubLevel +- projectOutOfSubLevel(level: Level, pos: Vector3dc, dest: Vector3d): Vector3d +- projectOutOfSubLevel(level: Level, pos: Vec3): Vec3 +- projectOutOfSubLevel(level: Level, pos: Position): Vec3 +- runIncludingSubLevels(level: Level, origin: Vec3, shouldCheckOrigin: boolean, subLevel: SubLevel, converter: (subLevel: SubLevel, pos: BlockPos) => T): T +- runIncludingSubLevels(level: Level, origin: Position, shouldCheckOrigin: boolean, subLevel: SubLevel, converter: (subLevel: SubLevel, pos: BlockPos) => T): T +- findIncludingSubLevels(level: Level, origin: Vec3, shouldCheckOrigin: boolean, subLevel: SubLevel, converter: (subLevel: SubLevel, pos: BlockPos) => boolean): boolean +- findIncludingSubLevels(level: Level, origin: Position, shouldCheckOrigin: boolean, subLevel: SubLevel, converter: (subLevel: SubLevel, pos: BlockPos) => boolean): boolean +- distanceSquaredWithSubLevels(level: Level, a: Vector3dc, b: Vector3dc): double +- distanceSquaredWithSubLevels(level: Level, a: Position, b: Position): double +- distanceSquaredWithSubLevels(level: Level, a: Vector3dc, bX: double, bY: double, bZ: double): double +- distanceSquaredWithSubLevels(level: Level, a: Position, bX: double, bY: double, bZ: double): double +- distanceSquaredWithSubLevels(level: Level, aX: double, aY: double, aZ: double, bX: double, bY: double, bZ: double): double +- rectilinearDistanceWithSubLevels(level: Level, a: Vector3dc, b: Vector3dc): double +- rectilinearDistanceWithSubLevels(level: Level, a: Position, b: Position): double +- rectilinearDistanceWithSubLevels(level: Level, a: Vector3dc, bX: double, bY: double, bZ: double): double +- rectilinearDistanceWithSubLevels(level: Level, a: Position, bX: double, bY: double, bZ: double): double +- rectilinearDistanceWithSubLevels(level: Level, aX: double, aY: double, aZ: double, bX: double, bY: double, bZ: double): double +- getVelocity(level: Level, pos: Vector3dc, dest: Vector3d): Vec3 +- getVelocity(level: Level, pos: Vec3): Vec3 +- getVelocity(level: Level, pos: Position): Vec3 +- getVelocity(level: Level, subLevel: SubLevelAccess, pos: Vector3dc, dest: Vector3d): Vector3d +- getVelocity(level: Level, subLevel: SubLevelAccess, pos: Vec3): Vec3 +- getVelocity(level: Level, subLevel: SubLevelAccess, pos: Position): Vec3 +- getVelocityRelativeToAir(level: Level, pos: Vector3dc, dest: Vector3d): Vector3d +- getVelocityRelativeToAir(level: Level, pos: Vec3): Vec3 +- getVelocityRelativeToAir(level: Level, pos: Position): Vec3 +- isInPlotGrid(level: Level, chunkX: int, chunkZ: int): boolean +- getTrackingSubLevel(entity: Entity): SubLevel +- getLastTrackingSubLevel(entity: Entity): SubLevel +- getTrackingOrVehicleSubLevel(entity: Entity): SubLevel +- getVehicleSubLevel(entity: Entity): SubLevel +- getEyePositionInterpolated(entity: Entity, partialTicks: float): Vec3 +- getFeetPos(entity: Entity, distanceDown: float): Vector3d +# SubLevelHelper +- getConnectedChain(subLevel: SubLevel): Collection +- getVelocityRelativeToAir(level: Level, pos: Vector3dc, dest: Vector3d): Vector3d +- popEntityLocal(subLevel: SubLevel, player: Entity) +- popEntityLocal(subLevel: SubLevel, entity: Entity, anchor: EntityAnchorArgument.Anchor) +- pushEntityLocal(subLevel: SubLevel, player: Entity) +- pushEntityLocal(subLevel: SubLevel, entity: Entity, anchor: EntityAnchorArgument.Anchor) +<||> {server-tab-key} +# SubLevelHelper +- getLoadingDependencyChain(subLevel: ServerSubLevel): Collection +# DimensionPhysics +- of(level: Level): DimensionPhysics +- getDefault(level: Level): DimensionPhysics +- getMagneticNorth(level: Level): Vector3fc +- getGravity(level: Level): Vector3dc +- getUniversalDrag(level: ServerLevel): double +- getAirPressure(level: ServerLevel, position: Vector3dc): double +# SubLevelContainer +- getContainer(level: Level): SubLevelContainer +# SubLevelAssemblyHelper +- assembleBlocks(level: ServerLevel, anchor: BlockPos, blocks: Iterable, bounds: BoundingBox3ic): ServerSubLevel +- kickFromContainingSubLevel(level: ServerLevel, physicsSystem: SubLevelPhysicsSystem, pipeline: PhysicsPipeline, subLevel: ServerSubLevel, containingSubLevel: SubLevel) +- gatherConnectedBlocks(gatherOrigin: BlockPos, level: ServerLevel, maximumBlocksToAssemble: int, frontierPredicate: (originPos: BlockPos, originState: BlockState, pos: BlockPos, state: BlockState, directionFrom: Direction) => boolean): SubLevelAssemblyHelper.GatherResult +- moveTrackingPoints(level: ServerLevel, bounds: BoundingBox3ic, subLevel: ServerSubLevel, transform: SubLevelAssemblyHelper.AssemblyTransform) +- moveOtherStuff(level: ServerLevel, transform: SubLevelAssemblyHelper.AssemblyTransform, blocks: Iterable, bounds: BoundingBox3ic) +- moveBlocks(level: ServerLevel, transform: SubLevelAssemblyHelper.AssemblyTransform. blocks: Iterable) +- markAndNotifyBlock(level: Level, pPos: BlockPos, levelChunk: LevelChunk, oldState: BlockState, newState: BlockState, pFlags: int, pRecursionLeft: int) +# SubLevelPhysicsSystem +- get(level: Level): SubLevelPhysicsSystem +- require(level: Level): SubLevelPhysicsSystem +- getCurrentlySteppingSystem(): SubLevelPhysicsSystem +<||> {client-tab-key} +# DimensionPhysics +- of(level: Level): DimensionPhysics +- getDefault(level: Level): DimensionPhysics +- getMagneticNorth(level: Level): Vector3fc +- getGravity(level: Level): Vector3dc +# SubLevelContainer +- getContainer(level: Level): SubLevelContainer +<||> {startup-tab-key} +# SubLevelHelper +- registerWindProvider(fn: (pos: Vector3dc, level: Level) => Vector3dc) +# SubLevelHeatMapManager +- addSplitListener(listener: (level: Level, assemblyBounds: BoundingBox3ic, blocks: Collection) => {}) +<| +<| \ No newline at end of file From 0c046101ec605aa9f978ca2728ee5daa7a45a622 Mon Sep 17 00:00:00 2001 From: TechTastic <74630543+TechTastic@users.noreply.github.com> Date: Sat, 2 May 2026 05:26:51 -0500 Subject: [PATCH 2/8] Added `[ts]code` syntax to all `Bindings` methods --- wiki/addons/kubejsable/page.kubedoc | 148 ++++++++++++++-------------- 1 file changed, 74 insertions(+), 74 deletions(-) diff --git a/wiki/addons/kubejsable/page.kubedoc b/wiki/addons/kubejsable/page.kubedoc index d652d3fd..158324c2 100644 --- a/wiki/addons/kubejsable/page.kubedoc +++ b/wiki/addons/kubejsable/page.kubedoc @@ -35,92 +35,92 @@ PhysicsEvents.ready(event => { <||> {bindings-tab-key} >| {common-tab-key}+ # Sable -- getAllIntersecting(level: Level, bounds: BoundingBox3dc): Iterable -- getContaining(level: Level, chunkX: int, chunkZ: int): SubLevel -- getContaining(level: Level, chunkPos: ChunkPos): SubLevel -- getContaining(level: Level, pos: SectionPos): SubLevel -- getContaining(level: Level, pos: Vec3i): SubLevel -- getContaining(level: Level, pos: Position): SubLevel -- getContaining(level: Level, pos: Vector3dc): SubLevel -- getContaining(level: Level, blockX: double, blockZ: double): SubLevel -- getContaining(entity: Entity): SubLevel -- getContaining(blockEntity: BlockEntity): SubLevel -- projectOutOfSubLevel(level: Level, pos: Vector3dc, dest: Vector3d): Vector3d -- projectOutOfSubLevel(level: Level, pos: Vec3): Vec3 -- projectOutOfSubLevel(level: Level, pos: Position): Vec3 -- runIncludingSubLevels(level: Level, origin: Vec3, shouldCheckOrigin: boolean, subLevel: SubLevel, converter: (subLevel: SubLevel, pos: BlockPos) => T): T -- runIncludingSubLevels(level: Level, origin: Position, shouldCheckOrigin: boolean, subLevel: SubLevel, converter: (subLevel: SubLevel, pos: BlockPos) => T): T -- findIncludingSubLevels(level: Level, origin: Vec3, shouldCheckOrigin: boolean, subLevel: SubLevel, converter: (subLevel: SubLevel, pos: BlockPos) => boolean): boolean -- findIncludingSubLevels(level: Level, origin: Position, shouldCheckOrigin: boolean, subLevel: SubLevel, converter: (subLevel: SubLevel, pos: BlockPos) => boolean): boolean -- distanceSquaredWithSubLevels(level: Level, a: Vector3dc, b: Vector3dc): double -- distanceSquaredWithSubLevels(level: Level, a: Position, b: Position): double -- distanceSquaredWithSubLevels(level: Level, a: Vector3dc, bX: double, bY: double, bZ: double): double -- distanceSquaredWithSubLevels(level: Level, a: Position, bX: double, bY: double, bZ: double): double -- distanceSquaredWithSubLevels(level: Level, aX: double, aY: double, aZ: double, bX: double, bY: double, bZ: double): double -- rectilinearDistanceWithSubLevels(level: Level, a: Vector3dc, b: Vector3dc): double -- rectilinearDistanceWithSubLevels(level: Level, a: Position, b: Position): double -- rectilinearDistanceWithSubLevels(level: Level, a: Vector3dc, bX: double, bY: double, bZ: double): double -- rectilinearDistanceWithSubLevels(level: Level, a: Position, bX: double, bY: double, bZ: double): double -- rectilinearDistanceWithSubLevels(level: Level, aX: double, aY: double, aZ: double, bX: double, bY: double, bZ: double): double -- getVelocity(level: Level, pos: Vector3dc, dest: Vector3d): Vec3 -- getVelocity(level: Level, pos: Vec3): Vec3 -- getVelocity(level: Level, pos: Position): Vec3 -- getVelocity(level: Level, subLevel: SubLevelAccess, pos: Vector3dc, dest: Vector3d): Vector3d -- getVelocity(level: Level, subLevel: SubLevelAccess, pos: Vec3): Vec3 -- getVelocity(level: Level, subLevel: SubLevelAccess, pos: Position): Vec3 -- getVelocityRelativeToAir(level: Level, pos: Vector3dc, dest: Vector3d): Vector3d -- getVelocityRelativeToAir(level: Level, pos: Vec3): Vec3 -- getVelocityRelativeToAir(level: Level, pos: Position): Vec3 -- isInPlotGrid(level: Level, chunkX: int, chunkZ: int): boolean -- getTrackingSubLevel(entity: Entity): SubLevel -- getLastTrackingSubLevel(entity: Entity): SubLevel -- getTrackingOrVehicleSubLevel(entity: Entity): SubLevel -- getVehicleSubLevel(entity: Entity): SubLevel -- getEyePositionInterpolated(entity: Entity, partialTicks: float): Vec3 -- getFeetPos(entity: Entity, distanceDown: float): Vector3d +- `[ts]getAllIntersecting(level: Level, bounds: BoundingBox3dc): Iterable` +- `[ts]getContaining(level: Level, chunkX: int, chunkZ: int): SubLevel` +- `[ts]getContaining(level: Level, chunkPos: ChunkPos): SubLevel` +- `[ts]getContaining(level: Level, pos: SectionPos): SubLevel` +- `[ts]getContaining(level: Level, pos: Vec3i): SubLevel` +- `[ts]getContaining(level: Level, pos: Position): SubLevel` +- `[ts]getContaining(level: Level, pos: Vector3dc): SubLevel` +- `[ts]getContaining(level: Level, blockX: double, blockZ: double): SubLevel` +- `[ts]getContaining(entity: Entity): SubLevel` +- `[ts]getContaining(blockEntity: BlockEntity): SubLevel` +- `[ts]projectOutOfSubLevel(level: Level, pos: Vector3dc, dest: Vector3d): Vector3d` +- `[ts]projectOutOfSubLevel(level: Level, pos: Vec3): Vec3` +- `[ts]projectOutOfSubLevel(level: Level, pos: Position): Vec3` +- `[ts]runIncludingSubLevels(level: Level, origin: Vec3, shouldCheckOrigin: boolean, subLevel: SubLevel, converter: (subLevel: SubLevel, pos: BlockPos) => T): T` +- `[ts]runIncludingSubLevels(level: Level, origin: Position, shouldCheckOrigin: boolean, subLevel: SubLevel, converter: (subLevel: SubLevel, pos: BlockPos) => T): T` +- `[ts]findIncludingSubLevels(level: Level, origin: Vec3, shouldCheckOrigin: boolean, subLevel: SubLevel, converter: (subLevel: SubLevel, pos: BlockPos) => boolean): boolean` +- `[ts]findIncludingSubLevels(level: Level, origin: Position, shouldCheckOrigin: boolean, subLevel: SubLevel, converter: (subLevel: SubLevel, pos: BlockPos) => boolean): boolean` +- `[ts]distanceSquaredWithSubLevels(level: Level, a: Vector3dc, b: Vector3dc): double` +- `[ts]distanceSquaredWithSubLevels(level: Level, a: Position, b: Position): double` +- `[ts]distanceSquaredWithSubLevels(level: Level, a: Vector3dc, bX: double, bY: double, bZ: double): double` +- `[ts]distanceSquaredWithSubLevels(level: Level, a: Position, bX: double, bY: double, bZ: double): double` +- `[ts]distanceSquaredWithSubLevels(level: Level, aX: double, aY: double, aZ: double, bX: double, bY: double, bZ: double): double` +- `[ts]rectilinearDistanceWithSubLevels(level: Level, a: Vector3dc, b: Vector3dc): double` +- `[ts]rectilinearDistanceWithSubLevels(level: Level, a: Position, b: Position): double` +- `[ts]rectilinearDistanceWithSubLevels(level: Level, a: Vector3dc, bX: double, bY: double, bZ: double): double` +- `[ts]rectilinearDistanceWithSubLevels(level: Level, a: Position, bX: double, bY: double, bZ: double): double` +- `[ts]rectilinearDistanceWithSubLevels(level: Level, aX: double, aY: double, aZ: double, bX: double, bY: double, bZ: double): double` +- `[ts]getVelocity(level: Level, pos: Vector3dc, dest: Vector3d): Vec3` +- `[ts]getVelocity(level: Level, pos: Vec3): Vec3` +- `[ts]getVelocity(level: Level, pos: Position): Vec3` +- `[ts]getVelocity(level: Level, subLevel: SubLevelAccess, pos: Vector3dc, dest: Vector3d): Vector3d` +- `[ts]getVelocity(level: Level, subLevel: SubLevelAccess, pos: Vec3): Vec3` +- `[ts]getVelocity(level: Level, subLevel: SubLevelAccess, pos: Position): Vec3` +- `[ts]getVelocityRelativeToAir(level: Level, pos: Vector3dc, dest: Vector3d): Vector3d` +- `[ts]getVelocityRelativeToAir(level: Level, pos: Vec3): Vec3` +- `[ts]getVelocityRelativeToAir(level: Level, pos: Position): Vec3` +- `[ts]isInPlotGrid(level: Level, chunkX: int, chunkZ: int): boolean` +- `[ts]getTrackingSubLevel(entity: Entity): SubLevel` +- `[ts]getLastTrackingSubLevel(entity: Entity): SubLevel` +- `[ts]getTrackingOrVehicleSubLevel(entity: Entity): SubLevel` +- `[ts]getVehicleSubLevel(entity: Entity): SubLevel` +- `[ts]getEyePositionInterpolated(entity: Entity, partialTicks: float): Vec3` +- `[ts]getFeetPos(entity: Entity, distanceDown: float): Vector3d` # SubLevelHelper -- getConnectedChain(subLevel: SubLevel): Collection -- getVelocityRelativeToAir(level: Level, pos: Vector3dc, dest: Vector3d): Vector3d -- popEntityLocal(subLevel: SubLevel, player: Entity) -- popEntityLocal(subLevel: SubLevel, entity: Entity, anchor: EntityAnchorArgument.Anchor) -- pushEntityLocal(subLevel: SubLevel, player: Entity) -- pushEntityLocal(subLevel: SubLevel, entity: Entity, anchor: EntityAnchorArgument.Anchor) +- `[ts]getConnectedChain(subLevel: SubLevel): Collection` +- `[ts]getVelocityRelativeToAir(level: Level, pos: Vector3dc, dest: Vector3d): Vector3d` +- `[ts]popEntityLocal(subLevel: SubLevel, player: Entity)` +- `[ts]popEntityLocal(subLevel: SubLevel, entity: Entity, anchor: EntityAnchorArgument.Anchor)` +- `[ts]pushEntityLocal(subLevel: SubLevel, player: Entity)` +- `[ts]pushEntityLocal(subLevel: SubLevel, entity: Entity, anchor: EntityAnchorArgument.Anchor)` <||> {server-tab-key} # SubLevelHelper -- getLoadingDependencyChain(subLevel: ServerSubLevel): Collection +- `[ts]getLoadingDependencyChain(subLevel: ServerSubLevel): Collection` # DimensionPhysics -- of(level: Level): DimensionPhysics -- getDefault(level: Level): DimensionPhysics -- getMagneticNorth(level: Level): Vector3fc -- getGravity(level: Level): Vector3dc -- getUniversalDrag(level: ServerLevel): double -- getAirPressure(level: ServerLevel, position: Vector3dc): double +- `[ts]of(level: Level): DimensionPhysics` +- `[ts]getDefault(level: Level): DimensionPhysics` +- `[ts]getMagneticNorth(level: Level): Vector3fc` +- `[ts]getGravity(level: Level): Vector3dc` +- `[ts]getUniversalDrag(level: ServerLevel): double` +- `[ts]getAirPressure(level: ServerLevel, position: Vector3dc): double` # SubLevelContainer -- getContainer(level: Level): SubLevelContainer +- `[ts]getContainer(level: Level): SubLevelContainer` # SubLevelAssemblyHelper -- assembleBlocks(level: ServerLevel, anchor: BlockPos, blocks: Iterable, bounds: BoundingBox3ic): ServerSubLevel -- kickFromContainingSubLevel(level: ServerLevel, physicsSystem: SubLevelPhysicsSystem, pipeline: PhysicsPipeline, subLevel: ServerSubLevel, containingSubLevel: SubLevel) -- gatherConnectedBlocks(gatherOrigin: BlockPos, level: ServerLevel, maximumBlocksToAssemble: int, frontierPredicate: (originPos: BlockPos, originState: BlockState, pos: BlockPos, state: BlockState, directionFrom: Direction) => boolean): SubLevelAssemblyHelper.GatherResult -- moveTrackingPoints(level: ServerLevel, bounds: BoundingBox3ic, subLevel: ServerSubLevel, transform: SubLevelAssemblyHelper.AssemblyTransform) -- moveOtherStuff(level: ServerLevel, transform: SubLevelAssemblyHelper.AssemblyTransform, blocks: Iterable, bounds: BoundingBox3ic) -- moveBlocks(level: ServerLevel, transform: SubLevelAssemblyHelper.AssemblyTransform. blocks: Iterable) -- markAndNotifyBlock(level: Level, pPos: BlockPos, levelChunk: LevelChunk, oldState: BlockState, newState: BlockState, pFlags: int, pRecursionLeft: int) +- `[ts]assembleBlocks(level: ServerLevel, anchor: BlockPos, blocks: Iterable, bounds: BoundingBox3ic): ServerSubLevel` +- `[ts]kickFromContainingSubLevel(level: ServerLevel, physicsSystem: SubLevelPhysicsSystem, pipeline: PhysicsPipeline, subLevel: ServerSubLevel, containingSubLevel: SubLevel)` +- `[ts]gatherConnectedBlocks(gatherOrigin: BlockPos, level: ServerLevel, maximumBlocksToAssemble: int, frontierPredicate: (originPos: BlockPos, originState: BlockState, pos: BlockPos, state: BlockState, directionFrom: Direction) => boolean): SubLevelAssemblyHelper.GatherResult` +- `[ts]moveTrackingPoints(level: ServerLevel, bounds: BoundingBox3ic, subLevel: ServerSubLevel, transform: SubLevelAssemblyHelper.AssemblyTransform)` +- `[ts]moveOtherStuff(level: ServerLevel, transform: SubLevelAssemblyHelper.AssemblyTransform, blocks: Iterable, bounds: BoundingBox3ic)` +- `[ts]moveBlocks(level: ServerLevel, transform: SubLevelAssemblyHelper.AssemblyTransform. blocks: Iterable)` +- `[ts]markAndNotifyBlock(level: Level, pPos: BlockPos, levelChunk: LevelChunk, oldState: BlockState, newState: BlockState, pFlags: int, pRecursionLeft: int)` # SubLevelPhysicsSystem -- get(level: Level): SubLevelPhysicsSystem -- require(level: Level): SubLevelPhysicsSystem -- getCurrentlySteppingSystem(): SubLevelPhysicsSystem +- `[ts]get(level: Level): SubLevelPhysicsSystem` +- `[ts]require(level: Level): SubLevelPhysicsSystem` +- `[ts]getCurrentlySteppingSystem(): SubLevelPhysicsSystem` <||> {client-tab-key} # DimensionPhysics -- of(level: Level): DimensionPhysics -- getDefault(level: Level): DimensionPhysics -- getMagneticNorth(level: Level): Vector3fc -- getGravity(level: Level): Vector3dc +- `[ts]of(level: Level): DimensionPhysics` +- `[ts]getDefault(level: Level): DimensionPhysics` +- `[ts]getMagneticNorth(level: Level): Vector3fc` +- `[ts]getGravity(level: Level): Vector3dc` # SubLevelContainer -- getContainer(level: Level): SubLevelContainer +- `[ts]getContainer(level: Level): SubLevelContainer` <||> {startup-tab-key} # SubLevelHelper -- registerWindProvider(fn: (pos: Vector3dc, level: Level) => Vector3dc) +- `[ts]registerWindProvider(fn: (pos: Vector3dc, level: Level) => Vector3dc)` # SubLevelHeatMapManager -- addSplitListener(listener: (level: Level, assemblyBounds: BoundingBox3ic, blocks: Collection) => {}) +- `[ts]addSplitListener(listener: (level: Level, assemblyBounds: BoundingBox3ic, blocks: Collection) => {})` <| <| \ No newline at end of file From 58b5009a2a3cd3992e94206365345219419c38a3 Mon Sep 17 00:00:00 2001 From: TechTastic <74630543+TechTastic@users.noreply.github.com> Date: Sat, 2 May 2026 05:31:23 -0500 Subject: [PATCH 3/8] Fixed `addSplitListener`'s `listener` syntax so its lambda returns `void` rather than `{}` --- wiki/addons/kubejsable/page.kubedoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wiki/addons/kubejsable/page.kubedoc b/wiki/addons/kubejsable/page.kubedoc index 158324c2..83896248 100644 --- a/wiki/addons/kubejsable/page.kubedoc +++ b/wiki/addons/kubejsable/page.kubedoc @@ -121,6 +121,6 @@ PhysicsEvents.ready(event => { # SubLevelHelper - `[ts]registerWindProvider(fn: (pos: Vector3dc, level: Level) => Vector3dc)` # SubLevelHeatMapManager -- `[ts]addSplitListener(listener: (level: Level, assemblyBounds: BoundingBox3ic, blocks: Collection) => {})` +- `[ts]addSplitListener(listener: (level: Level, assemblyBounds: BoundingBox3ic, blocks: Collection) => void)` <| <| \ No newline at end of file From 938e03ad52099144c9781c992d078f764614fc64 Mon Sep 17 00:00:00 2001 From: TechTastic <74630543+TechTastic@users.noreply.github.com> Date: Sat, 2 May 2026 05:44:54 -0500 Subject: [PATCH 4/8] Adding `bindings-tab-contentys` variable callout block to hopefully fix my sub/inner tabs --- wiki/addons/kubejsable/page.kubedoc | 72 +++++++++++++++-------------- 1 file changed, 38 insertions(+), 34 deletions(-) diff --git a/wiki/addons/kubejsable/page.kubedoc b/wiki/addons/kubejsable/page.kubedoc index 83896248..bfb10991 100644 --- a/wiki/addons/kubejsable/page.kubedoc +++ b/wiki/addons/kubejsable/page.kubedoc @@ -1,39 +1,7 @@ KubeJSable is a KubeJS addon for interacting with Sable! This includes multiple new bindings and access to Sable events! -|>+ {events-tab-key} -# PhysicsEvents -## Pre -This event is fired from `ForgeSablePrePhysicsTickEvent` just before the next physics tick. -The event object itself includes a `SubLevelPhysicsSystem` (`physicsSystem`) instance and a `timeStep` value. ->>> info -This event still fires when the physics engine in a world is paused! -<<< -```javascript -PhysicsEvents.ready(event => { - console.info("Pre-Physics Tick!") -}) -``` -## Post -This event is fired from `ForgeSablePostPhysicsTickEvent` just after the last physics tick. -The event object itself includes a `SubLevelPhysicsSystem` (`physicsSystem`) instance and a `timeStep` value. ->>> info -This event still fires when the physics engine in a world is paused! -<<< -```javascript -PhysicsEvents.post(event => { - console.info("Post-Physics Tick!") -}) -``` -## Ready -This event is fired from `ForgeSableSubLevelContainerReadyEvent` whenever a `SubLevelContainer` is readied. -The event object itself includes a `Level` (`level`) instance and a `SubLevelContainer` (`subLevelContainer`) instance. -```javascript -PhysicsEvents.ready(event => { - console.info("Sub-Level Container Ready!") -}) -``` -<||> {bindings-tab-key} ->| {common-tab-key}+ +>>> #bindings-tab-contents +>|+ {common-tab-key} # Sable - `[ts]getAllIntersecting(level: Level, bounds: BoundingBox3dc): Iterable` - `[ts]getContaining(level: Level, chunkX: int, chunkZ: int): SubLevel` @@ -123,4 +91,40 @@ PhysicsEvents.ready(event => { # SubLevelHeatMapManager - `[ts]addSplitListener(listener: (level: Level, assemblyBounds: BoundingBox3ic, blocks: Collection) => void)` <| +<<< + +|>+ {events-tab-key} +# PhysicsEvents +## Pre +This event is fired from `ForgeSablePrePhysicsTickEvent` just before the next physics tick. +The event object itself includes a `SubLevelPhysicsSystem` (`physicsSystem`) instance and a `timeStep` value. +>>> info +This event still fires when the physics engine in a world is paused! +<<< +```javascript +PhysicsEvents.ready(event => { + console.info("Pre-Physics Tick!") +}) +``` +## Post +This event is fired from `ForgeSablePostPhysicsTickEvent` just after the last physics tick. +The event object itself includes a `SubLevelPhysicsSystem` (`physicsSystem`) instance and a `timeStep` value. +>>> info +This event still fires when the physics engine in a world is paused! +<<< +```javascript +PhysicsEvents.post(event => { + console.info("Post-Physics Tick!") +}) +``` +## Ready +This event is fired from `ForgeSableSubLevelContainerReadyEvent` whenever a `SubLevelContainer` is readied. +The event object itself includes a `Level` (`level`) instance and a `SubLevelContainer` (`subLevelContainer`) instance. +```javascript +PhysicsEvents.ready(event => { + console.info("Sub-Level Container Ready!") +}) +``` +<||> {bindings-tab-key} +{{#bindings-tab-contents}} <| \ No newline at end of file From 6b9a717b24644d5b0015c6722fa453dba6f39ccd Mon Sep 17 00:00:00 2001 From: TechTastic <74630543+TechTastic@users.noreply.github.com> Date: Sat, 2 May 2026 05:49:30 -0500 Subject: [PATCH 5/8] Whoops, replaced `{{bindings-tab-contents}}` with `` --- wiki/addons/kubejsable/page.kubedoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wiki/addons/kubejsable/page.kubedoc b/wiki/addons/kubejsable/page.kubedoc index bfb10991..7b3d8939 100644 --- a/wiki/addons/kubejsable/page.kubedoc +++ b/wiki/addons/kubejsable/page.kubedoc @@ -126,5 +126,5 @@ PhysicsEvents.ready(event => { }) ``` <||> {bindings-tab-key} -{{#bindings-tab-contents}} +<#bindings-tab-contents> <| \ No newline at end of file From 82c9621b37d3f34bfff44634b973f4dbf8d64548 Mon Sep 17 00:00:00 2001 From: TechTastic <74630543+TechTastic@users.noreply.github.com> Date: Sat, 2 May 2026 05:51:49 -0500 Subject: [PATCH 6/8] Fixed mistyped `|>+` --- wiki/addons/kubejsable/page.kubedoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wiki/addons/kubejsable/page.kubedoc b/wiki/addons/kubejsable/page.kubedoc index 7b3d8939..92f7b025 100644 --- a/wiki/addons/kubejsable/page.kubedoc +++ b/wiki/addons/kubejsable/page.kubedoc @@ -1,7 +1,7 @@ KubeJSable is a KubeJS addon for interacting with Sable! This includes multiple new bindings and access to Sable events! >>> #bindings-tab-contents ->|+ {common-tab-key} +|>+ {common-tab-key} # Sable - `[ts]getAllIntersecting(level: Level, bounds: BoundingBox3dc): Iterable` - `[ts]getContaining(level: Level, chunkX: int, chunkZ: int): SubLevel` From 78fbd86287bfdb86b6e7075379bb5c06d2ced5ce Mon Sep 17 00:00:00 2001 From: TechTastic <74630543+TechTastic@users.noreply.github.com> Date: Sun, 3 May 2026 22:37:05 -0500 Subject: [PATCH 7/8] Updated documentation for KubeJSable `1.1.0` release --- wiki/addons/kubejsable/page.kubedoc | 38 ++++++----------------------- 1 file changed, 8 insertions(+), 30 deletions(-) diff --git a/wiki/addons/kubejsable/page.kubedoc b/wiki/addons/kubejsable/page.kubedoc index 92f7b025..61866dfb 100644 --- a/wiki/addons/kubejsable/page.kubedoc +++ b/wiki/addons/kubejsable/page.kubedoc @@ -5,47 +5,25 @@ KubeJSable is a KubeJS addon for interacting with Sable! This includes multiple # Sable - `[ts]getAllIntersecting(level: Level, bounds: BoundingBox3dc): Iterable` - `[ts]getContaining(level: Level, chunkX: int, chunkZ: int): SubLevel` -- `[ts]getContaining(level: Level, chunkPos: ChunkPos): SubLevel` -- `[ts]getContaining(level: Level, pos: SectionPos): SubLevel` - `[ts]getContaining(level: Level, pos: Vec3i): SubLevel` -- `[ts]getContaining(level: Level, pos: Position): SubLevel` -- `[ts]getContaining(level: Level, pos: Vector3dc): SubLevel` -- `[ts]getContaining(level: Level, blockX: double, blockZ: double): SubLevel` +- `[ts]getContaining(level: Level, pos: Vec3): SubLevel` - `[ts]getContaining(entity: Entity): SubLevel` - `[ts]getContaining(blockEntity: BlockEntity): SubLevel` -- `[ts]projectOutOfSubLevel(level: Level, pos: Vector3dc, dest: Vector3d): Vector3d` - `[ts]projectOutOfSubLevel(level: Level, pos: Vec3): Vec3` -- `[ts]projectOutOfSubLevel(level: Level, pos: Position): Vec3` - `[ts]runIncludingSubLevels(level: Level, origin: Vec3, shouldCheckOrigin: boolean, subLevel: SubLevel, converter: (subLevel: SubLevel, pos: BlockPos) => T): T` -- `[ts]runIncludingSubLevels(level: Level, origin: Position, shouldCheckOrigin: boolean, subLevel: SubLevel, converter: (subLevel: SubLevel, pos: BlockPos) => T): T` - `[ts]findIncludingSubLevels(level: Level, origin: Vec3, shouldCheckOrigin: boolean, subLevel: SubLevel, converter: (subLevel: SubLevel, pos: BlockPos) => boolean): boolean` -- `[ts]findIncludingSubLevels(level: Level, origin: Position, shouldCheckOrigin: boolean, subLevel: SubLevel, converter: (subLevel: SubLevel, pos: BlockPos) => boolean): boolean` -- `[ts]distanceSquaredWithSubLevels(level: Level, a: Vector3dc, b: Vector3dc): double` -- `[ts]distanceSquaredWithSubLevels(level: Level, a: Position, b: Position): double` -- `[ts]distanceSquaredWithSubLevels(level: Level, a: Vector3dc, bX: double, bY: double, bZ: double): double` -- `[ts]distanceSquaredWithSubLevels(level: Level, a: Position, bX: double, bY: double, bZ: double): double` -- `[ts]distanceSquaredWithSubLevels(level: Level, aX: double, aY: double, aZ: double, bX: double, bY: double, bZ: double): double` -- `[ts]rectilinearDistanceWithSubLevels(level: Level, a: Vector3dc, b: Vector3dc): double` -- `[ts]rectilinearDistanceWithSubLevels(level: Level, a: Position, b: Position): double` -- `[ts]rectilinearDistanceWithSubLevels(level: Level, a: Vector3dc, bX: double, bY: double, bZ: double): double` -- `[ts]rectilinearDistanceWithSubLevels(level: Level, a: Position, bX: double, bY: double, bZ: double): double` -- `[ts]rectilinearDistanceWithSubLevels(level: Level, aX: double, aY: double, aZ: double, bX: double, bY: double, bZ: double): double` -- `[ts]getVelocity(level: Level, pos: Vector3dc, dest: Vector3d): Vec3` +- `[ts]distanceSquaredWithSubLevels(level: Level, a: Vec3, b: Vec3): double` +- `[ts]rectilinearDistanceWithSubLevels(level: Level, a: Vec3, b: Vec3): double` - `[ts]getVelocity(level: Level, pos: Vec3): Vec3` -- `[ts]getVelocity(level: Level, pos: Position): Vec3` -- `[ts]getVelocity(level: Level, subLevel: SubLevelAccess, pos: Vector3dc, dest: Vector3d): Vector3d` - `[ts]getVelocity(level: Level, subLevel: SubLevelAccess, pos: Vec3): Vec3` -- `[ts]getVelocity(level: Level, subLevel: SubLevelAccess, pos: Position): Vec3` -- `[ts]getVelocityRelativeToAir(level: Level, pos: Vector3dc, dest: Vector3d): Vector3d` - `[ts]getVelocityRelativeToAir(level: Level, pos: Vec3): Vec3` -- `[ts]getVelocityRelativeToAir(level: Level, pos: Position): Vec3` - `[ts]isInPlotGrid(level: Level, chunkX: int, chunkZ: int): boolean` - `[ts]getTrackingSubLevel(entity: Entity): SubLevel` - `[ts]getLastTrackingSubLevel(entity: Entity): SubLevel` - `[ts]getTrackingOrVehicleSubLevel(entity: Entity): SubLevel` - `[ts]getVehicleSubLevel(entity: Entity): SubLevel` - `[ts]getEyePositionInterpolated(entity: Entity, partialTicks: float): Vec3` -- `[ts]getFeetPos(entity: Entity, distanceDown: float): Vector3d` +- `[ts]getFeetPos(entity: Entity, distanceDown: float): Vec3` # SubLevelHelper - `[ts]getConnectedChain(subLevel: SubLevel): Collection` - `[ts]getVelocityRelativeToAir(level: Level, pos: Vector3dc, dest: Vector3d): Vector3d` @@ -60,9 +38,9 @@ KubeJSable is a KubeJS addon for interacting with Sable! This includes multiple - `[ts]of(level: Level): DimensionPhysics` - `[ts]getDefault(level: Level): DimensionPhysics` - `[ts]getMagneticNorth(level: Level): Vector3fc` -- `[ts]getGravity(level: Level): Vector3dc` +- `[ts]getGravity(level: Level): Vec3` - `[ts]getUniversalDrag(level: ServerLevel): double` -- `[ts]getAirPressure(level: ServerLevel, position: Vector3dc): double` +- `[ts]getAirPressure(level: ServerLevel, position: Vec3): double` # SubLevelContainer - `[ts]getContainer(level: Level): SubLevelContainer` # SubLevelAssemblyHelper @@ -82,12 +60,12 @@ KubeJSable is a KubeJS addon for interacting with Sable! This includes multiple - `[ts]of(level: Level): DimensionPhysics` - `[ts]getDefault(level: Level): DimensionPhysics` - `[ts]getMagneticNorth(level: Level): Vector3fc` -- `[ts]getGravity(level: Level): Vector3dc` +- `[ts]getGravity(level: Level): Vec3` # SubLevelContainer - `[ts]getContainer(level: Level): SubLevelContainer` <||> {startup-tab-key} # SubLevelHelper -- `[ts]registerWindProvider(fn: (pos: Vector3dc, level: Level) => Vector3dc)` +- `[ts]registerWindProvider(fn: (pos: Vector3dc, level: Level) => Vec3)` # SubLevelHeatMapManager - `[ts]addSplitListener(listener: (level: Level, assemblyBounds: BoundingBox3ic, blocks: Collection) => void)` <| From ba176588077028ee6cbaa8b0299da1825f152d46 Mon Sep 17 00:00:00 2001 From: TechTastic <74630543+TechTastic@users.noreply.github.com> Date: Tue, 5 May 2026 00:10:41 -0500 Subject: [PATCH 8/8] Fixed a slight mistake --- wiki/addons/kubejsable/page.kubedoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wiki/addons/kubejsable/page.kubedoc b/wiki/addons/kubejsable/page.kubedoc index 61866dfb..89cb996d 100644 --- a/wiki/addons/kubejsable/page.kubedoc +++ b/wiki/addons/kubejsable/page.kubedoc @@ -80,7 +80,7 @@ The event object itself includes a `SubLevelPhysicsSystem` (`physicsSystem`) ins This event still fires when the physics engine in a world is paused! <<< ```javascript -PhysicsEvents.ready(event => { +PhysicsEvents.pre(event => { console.info("Pre-Physics Tick!") }) ```