Skip to content

Scene

Since 2.2.1

Scene renders an interactive 3D Minecraft world view inside a GUI element. It uses a WorldSceneRenderer to draw a set of blocks from a TrackedDummyWorld. The viewport supports:

  • Drag to rotate — left-click and drag to orbit the camera.
  • Scroll to zoom — mouse wheel changes the zoom level.
  • Block interaction — clicking reports the hit block position and face.
  • FBO mode — render at arbitrary resolution into a framebuffer object.

INFO

Everything documented on UIElement (layout, styles, events, data bindings, etc.) applies here too.


Usage

java
var scene = new Scene();

// Create the scene from a level:
scene.createScene(level); // or createScene(level, useFBO, size)

// Populate blocks to render:
var blocks = List.of(BlockPos.ZERO, new BlockPos(1, 0, 0));
scene.setRenderedCore(blocks);

// Listen for clicks:
scene.setOnSelected((pos, face) ->
    System.out.println("Clicked " + pos + " face " + face)
);

parent.addChild(scene);

Fields

NameTypeAccessDescription
rendererWorldSceneRenderer (nullable)private (getter, client-only)The underlying scene renderer.
dummyWorldTrackedDummyWorld (nullable)private (getter)The virtual world holding rendered blocks.
draggablebooleangetter/setterWhether the camera can be rotated by dragging. Default: true.
scalablebooleangetter/setterWhether the mouse wheel changes the zoom. Default: true.
intractablebooleangetter/setterWhether block clicks are reported. Default: true.
renderFacingbooleangetter/setterWhether face highlights are drawn. Default: true.
renderSelectbooleangetter/setterWhether selected block highlights are drawn. Default: true.
showHoverBlockTipsbooleangetter/setterWhether a tooltip is shown for the hovered block. Default: false.
tickWorldbooleangetter/setterWhether dummyWorld is ticked every frame. Default: true.
useOrthobooleanprivate (getter)true when using orthographic projection.
useCachebooleanprivate (getter)true when using a cached buffer.
autoReleasedbooleanprivate (getter)true to release renderer resources when removed. Default: true.
centerVector3fprivate (getter)Camera look-at target (world space).
rotationPitchfloatprivate (getter)Camera pitch in degrees. Default: 25.
rotationYawfloatprivate (getter)Camera yaw in degrees. Default: -135.
zoomfloatprivate (getter)Camera distance. Default: 5.
onSelectedBiConsumer<BlockPos, Direction>getter/setterCallback invoked when a block is clicked.
lastHoverPosFaceBlockPosFace (nullable)private (getter)The block/face currently under the mouse.
lastClickPosFaceBlockPosFace (nullable)private (getter)The block/face that was last clicked.
lastSelectedPosFaceBlockPosFace (nullable)private (getter)The last selected block/face.

Methods

MethodReturnsDescription
createScene(Level)SceneInitialises the renderer with the given level (immediate mode).
createScene(Level, boolean, Size)SceneInitialises with optional FBO rendering at the given resolution.
setRenderedCore(Collection<BlockPos>)SceneSets the blocks to render; auto-adjusts the camera.
setRenderedCore(Collection<BlockPos>, ISceneBlockRenderHook)SceneSets blocks with a custom render hook.
setRenderedCore(Collection<BlockPos>, ISceneBlockRenderHook, boolean)SceneSets blocks; autoCamera controls whether the camera is repositioned.
useCacheBuffer(boolean)SceneEnables or disables compiled draw-call cache.
useOrtho(boolean)SceneSwitches between perspective and orthographic projection.
setOrthoRange(float)SceneSets the orthographic projection range (only effective when ortho is enabled).
setCenter(Vector3f)SceneSets the camera look-at target in world space.
setZoom(float)SceneSets the camera zoom distance.
setCameraYawAndPitch(float yaw, float pitch)SceneSets the camera yaw and pitch immediately.
setCameraYawAndPitchAnima(float yaw, float pitch, int duration)SceneAnimates the camera to the given yaw and pitch over duration ticks.
needCompileCache()voidFlags the cache as dirty so it is recompiled on the next frame.
releaseRendererResource()voidReleases GPU resources held by the renderer.
setBeforeWorldRender(Consumer<Scene>)SceneSets a hook called before each world render pass (client-only).
setAfterWorldRender(Consumer<Scene>)SceneSets a hook called after each world render pass.

Released under the MIT License.