Skip to content

SlimeVR Extended Bones And Features - #1938

Draft
Sebane1 wants to merge 244 commits into
SlimeVR:server-rewritefrom
Sebane1:main-extended
Draft

Sebane1 wants to merge 244 commits into
SlimeVR:server-rewritefrom
Sebane1:main-extended

Conversation

@Sebane1

@Sebane1 Sebane1 commented Sep 23, 2026 •

Copy link
Copy Markdown

This draft PR currently incorporates rough implementations of the following features:

Custom OSC Parameter Output
Bust tracking, tail tracking, and posterior tracking with automatic hiding of extra joints that aren't explicitly assigned.

Accompanying SolarXR
SlimeVR/SolarXR-Protocol#224

Sebane1 and others added 30 commits September 2, 2026 00:33
…cking

# Conflicts:
#	server/core/src/main/java/dev/slimevr/skeleton/module.kt
When we log for the first time, the static initialiser for
io.klogging.internal.hostname is called, since it instantiates a
LogEvent class where the 'host' field defaults to the aforementioned
hostname variable when no host is provided in the constructor.
The static initialiser may throw an UnknownHostException (since Java
may perform a DNS lookup in `InetAddress.getLocalHost().getHostName()`),
which is caught and tries to log the exception to stderr inside the
catch block.

Since we redirect the streams before the first time we log, the message
ends up getting passed to our LineLogger where we try to log it with
Klogger. This ends up trying to instantiate a LogEvent again with no
host field specified, and since an exception was thrown in hostname's
static initialiser, it is null, so an exception is thrown by the
constructor. This manifests as a crash with VERY CONFUSING log output:

INFO [                main] :        Configuration : Configuration set using the DSL with append=false

Exception: java.lang.NoClassDefFoundError thrown from the UncaughtExceptionHandler in thread "main"

Output with debugger printing all exceptions:

Connected to the target VM, address: 'localhost:35355', transport: 'socket'
---snip---
Exception 'java.net.UnknownHostException' occurred in thread 'main @mainSlimeVR#1' at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:-1)
Breakpoint reached
	at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:-1)
	at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:52)
	at java.net.InetAddress$PlatformResolver.lookupByName(InetAddress.java:1134)
	at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1712)
	at java.net.InetAddress$NameServiceAddresses.get(InetAddress.java:1060)
	at java.net.InetAddress.getAllByName0(InetAddress.java:1702)
	at java.net.InetAddress.getLocalHost(InetAddress.java:1796)
	at io.klogging.internal.KloggingEngine_jvmKt.<clinit>(KloggingEngine.jvm.kt:26)
	at io.klogging.events.LogEvent.<init>(LogEvent.kt:51)
	at io.klogging.BaseLogger.eventFrom(BaseLogger.kt:108)
	at io.klogging.impl.KloggerImpl.eventFrom(KloggerImpl.kt:39)
	at io.klogging.impl.KloggerImpl.emitEvent(KloggerImpl.kt:57)
	at io.klogging.Klogger.emitEvent$default(Klogger.kt:48)
	at io.klogging.Klogger.log$suspendImpl(Klogger.kt:123)
	at io.klogging.Klogger.log(Klogger.kt:-1)
	at io.klogging.impl.KloggerImpl.log(KloggerImpl.kt:39)
	at io.klogging.Klogger.info$suspendImpl(Klogger.kt:323)
	at io.klogging.Klogger.info(Klogger.kt:-1)
	at io.klogging.impl.KloggerImpl.info(KloggerImpl.kt:39)
	at dev.slimevr.logging.LoggerKt.configureLogging(logger.kt:74)
	at dev.slimevr.logging.LoggerKt.configureLogging$default(logger.kt:48)
	at dev.slimevr.desktop.LoggingKt.setupDesktopLogging(logging.kt:13)
	at dev.slimevr.desktop.Main$main$1.invokeSuspend(Main.kt:62)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith$$$capture(ContinuationImpl.kt:34)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:-1)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:100)
	at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:263)
	at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:94)
	at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:70)
	at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source:1)
	at dev.slimevr.desktop.Main.main(Main.kt:61)
Exception 'java.net.UnknownHostException' occurred in thread 'main @mainSlimeVR#1' at java.net.InetAddress$PlatformResolver.lookupByName(InetAddress.java:1137)
Breakpoint reached
	at java.net.InetAddress$PlatformResolver.lookupByName(InetAddress.java:1137)
	at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1712)
	at java.net.InetAddress$NameServiceAddresses.get(InetAddress.java:1060)
	at java.net.InetAddress.getAllByName0(InetAddress.java:1702)
	at java.net.InetAddress.getLocalHost(InetAddress.java:1796)
	at io.klogging.internal.KloggingEngine_jvmKt.<clinit>(KloggingEngine.jvm.kt:26)
	at io.klogging.events.LogEvent.<init>(LogEvent.kt:51)
	at io.klogging.BaseLogger.eventFrom(BaseLogger.kt:108)
	at io.klogging.impl.KloggerImpl.eventFrom(KloggerImpl.kt:39)
	at io.klogging.impl.KloggerImpl.emitEvent(KloggerImpl.kt:57)
	at io.klogging.Klogger.emitEvent$default(Klogger.kt:48)
	at io.klogging.Klogger.log$suspendImpl(Klogger.kt:123)
	at io.klogging.Klogger.log(Klogger.kt:-1)
	at io.klogging.impl.KloggerImpl.log(KloggerImpl.kt:39)
	at io.klogging.Klogger.info$suspendImpl(Klogger.kt:323)
	at io.klogging.Klogger.info(Klogger.kt:-1)
	at io.klogging.impl.KloggerImpl.info(KloggerImpl.kt:39)
	at dev.slimevr.logging.LoggerKt.configureLogging(logger.kt:74)
	at dev.slimevr.logging.LoggerKt.configureLogging$default(logger.kt:48)
	at dev.slimevr.desktop.LoggingKt.setupDesktopLogging(logging.kt:13)
	at dev.slimevr.desktop.Main$main$1.invokeSuspend(Main.kt:62)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith$$$capture(ContinuationImpl.kt:34)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:-1)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:100)
	at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:263)
	at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:94)
	at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:70)
	at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source:1)
	at dev.slimevr.desktop.Main.main(Main.kt:61)
Exception 'java.net.UnknownHostException' occurred in thread 'main @mainSlimeVR#1' at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1727)
Breakpoint reached
	at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1727)
	at java.net.InetAddress$NameServiceAddresses.get(InetAddress.java:1060)
	at java.net.InetAddress.getAllByName0(InetAddress.java:1702)
	at java.net.InetAddress.getLocalHost(InetAddress.java:1796)
	at io.klogging.internal.KloggingEngine_jvmKt.<clinit>(KloggingEngine.jvm.kt:26)
	at io.klogging.events.LogEvent.<init>(LogEvent.kt:51)
	at io.klogging.BaseLogger.eventFrom(BaseLogger.kt:108)
	at io.klogging.impl.KloggerImpl.eventFrom(KloggerImpl.kt:39)
	at io.klogging.impl.KloggerImpl.emitEvent(KloggerImpl.kt:57)
	at io.klogging.Klogger.emitEvent$default(Klogger.kt:48)
	at io.klogging.Klogger.log$suspendImpl(Klogger.kt:123)
	at io.klogging.Klogger.log(Klogger.kt:-1)
	at io.klogging.impl.KloggerImpl.log(KloggerImpl.kt:39)
	at io.klogging.Klogger.info$suspendImpl(Klogger.kt:323)
	at io.klogging.Klogger.info(Klogger.kt:-1)
	at io.klogging.impl.KloggerImpl.info(KloggerImpl.kt:39)
	at dev.slimevr.logging.LoggerKt.configureLogging(logger.kt:74)
	at dev.slimevr.logging.LoggerKt.configureLogging$default(logger.kt:48)
	at dev.slimevr.desktop.LoggingKt.setupDesktopLogging(logging.kt:13)
	at dev.slimevr.desktop.Main$main$1.invokeSuspend(Main.kt:62)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith$$$capture(ContinuationImpl.kt:34)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:-1)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:100)
	at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:263)
	at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:94)
	at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:70)
	at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source:1)
	at dev.slimevr.desktop.Main.main(Main.kt:61)
Exception 'java.net.UnknownHostException' occurred in thread 'main @mainSlimeVR#1' at java.net.InetAddress$NameServiceAddresses.get(InetAddress.java:1104)
Breakpoint reached
	at java.net.InetAddress$NameServiceAddresses.get(InetAddress.java:1104)
	at java.net.InetAddress.getAllByName0(InetAddress.java:1702)
	at java.net.InetAddress.getLocalHost(InetAddress.java:1796)
	at io.klogging.internal.KloggingEngine_jvmKt.<clinit>(KloggingEngine.jvm.kt:26)
	at io.klogging.events.LogEvent.<init>(LogEvent.kt:51)
	at io.klogging.BaseLogger.eventFrom(BaseLogger.kt:108)
	at io.klogging.impl.KloggerImpl.eventFrom(KloggerImpl.kt:39)
	at io.klogging.impl.KloggerImpl.emitEvent(KloggerImpl.kt:57)
	at io.klogging.Klogger.emitEvent$default(Klogger.kt:48)
	at io.klogging.Klogger.log$suspendImpl(Klogger.kt:123)
	at io.klogging.Klogger.log(Klogger.kt:-1)
	at io.klogging.impl.KloggerImpl.log(KloggerImpl.kt:39)
	at io.klogging.Klogger.info$suspendImpl(Klogger.kt:323)
	at io.klogging.Klogger.info(Klogger.kt:-1)
	at io.klogging.impl.KloggerImpl.info(KloggerImpl.kt:39)
	at dev.slimevr.logging.LoggerKt.configureLogging(logger.kt:74)
	at dev.slimevr.logging.LoggerKt.configureLogging$default(logger.kt:48)
	at dev.slimevr.desktop.LoggingKt.setupDesktopLogging(logging.kt:13)
	at dev.slimevr.desktop.Main$main$1.invokeSuspend(Main.kt:62)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith$$$capture(ContinuationImpl.kt:34)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:-1)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:100)
	at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:263)
	at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:94)
	at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:70)
	at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source:1)
	at dev.slimevr.desktop.Main.main(Main.kt:61)
Exception 'java.net.UnknownHostException' occurred in thread 'main @mainSlimeVR#1' at java.net.InetAddress$NameServiceAddresses.get(InetAddress.java:1111)
Breakpoint reached
	at java.net.InetAddress$NameServiceAddresses.get(InetAddress.java:1111)
	at java.net.InetAddress.getAllByName0(InetAddress.java:1702)
	at java.net.InetAddress.getLocalHost(InetAddress.java:1796)
	at io.klogging.internal.KloggingEngine_jvmKt.<clinit>(KloggingEngine.jvm.kt:26)
	at io.klogging.events.LogEvent.<init>(LogEvent.kt:51)
	at io.klogging.BaseLogger.eventFrom(BaseLogger.kt:108)
	at io.klogging.impl.KloggerImpl.eventFrom(KloggerImpl.kt:39)
	at io.klogging.impl.KloggerImpl.emitEvent(KloggerImpl.kt:57)
	at io.klogging.Klogger.emitEvent$default(Klogger.kt:48)
	at io.klogging.Klogger.log$suspendImpl(Klogger.kt:123)
	at io.klogging.Klogger.log(Klogger.kt:-1)
	at io.klogging.impl.KloggerImpl.log(KloggerImpl.kt:39)
	at io.klogging.Klogger.info$suspendImpl(Klogger.kt:323)
	at io.klogging.Klogger.info(Klogger.kt:-1)
	at io.klogging.impl.KloggerImpl.info(KloggerImpl.kt:39)
	at dev.slimevr.logging.LoggerKt.configureLogging(logger.kt:74)
	at dev.slimevr.logging.LoggerKt.configureLogging$default(logger.kt:48)
	at dev.slimevr.desktop.LoggingKt.setupDesktopLogging(logging.kt:13)
	at dev.slimevr.desktop.Main$main$1.invokeSuspend(Main.kt:62)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith$$$capture(ContinuationImpl.kt:34)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:-1)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:100)
	at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:263)
	at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:94)
	at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:70)
	at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source:1)
	at dev.slimevr.desktop.Main.main(Main.kt:61)
Exception 'java.net.UnknownHostException' occurred in thread 'main @mainSlimeVR#1' at java.net.InetAddress.getLocalHost(InetAddress.java:1803)
Breakpoint reached
	at java.net.InetAddress.getLocalHost(InetAddress.java:1803)
	at io.klogging.internal.KloggingEngine_jvmKt.<clinit>(KloggingEngine.jvm.kt:26)
	at io.klogging.events.LogEvent.<init>(LogEvent.kt:51)
	at io.klogging.BaseLogger.eventFrom(BaseLogger.kt:108)
	at io.klogging.impl.KloggerImpl.eventFrom(KloggerImpl.kt:39)
	at io.klogging.impl.KloggerImpl.emitEvent(KloggerImpl.kt:57)
	at io.klogging.Klogger.emitEvent$default(Klogger.kt:48)
	at io.klogging.Klogger.log$suspendImpl(Klogger.kt:123)
	at io.klogging.Klogger.log(Klogger.kt:-1)
	at io.klogging.impl.KloggerImpl.log(KloggerImpl.kt:39)
	at io.klogging.Klogger.info$suspendImpl(Klogger.kt:323)
	at io.klogging.Klogger.info(Klogger.kt:-1)
	at io.klogging.impl.KloggerImpl.info(KloggerImpl.kt:39)
	at dev.slimevr.logging.LoggerKt.configureLogging(logger.kt:74)
	at dev.slimevr.logging.LoggerKt.configureLogging$default(logger.kt:48)
	at dev.slimevr.desktop.LoggingKt.setupDesktopLogging(logging.kt:13)
	at dev.slimevr.desktop.Main$main$1.invokeSuspend(Main.kt:62)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith$$$capture(ContinuationImpl.kt:34)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:-1)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:100)
	at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:263)
	at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:94)
	at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:70)
	at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source:1)
	at dev.slimevr.desktop.Main.main(Main.kt:61)
Exception 'java.lang.NullPointerException' occurred in thread 'main @mainSlimeVR#1' at kotlin.jvm.internal.Intrinsics.throwParameterIsNullNPE(Intrinsics.java:140)
Breakpoint reached
	at kotlin.jvm.internal.Intrinsics.throwParameterIsNullNPE(Intrinsics.java:140)
	at kotlin.jvm.internal.Intrinsics.checkNotNullParameter(Intrinsics.java:131)
	at io.klogging.events.LogEvent.<init>(LogEvent.kt:48)
	at io.klogging.events.LogEvent.<init>(LogEvent.kt:48)
	at io.klogging.BaseLogger.eventFrom(BaseLogger.kt:108)
	at io.klogging.impl.NoCoLoggerImpl.eventFrom(NoCoLoggerImpl.kt:41)
	at io.klogging.impl.NoCoLoggerImpl.emitEvent(NoCoLoggerImpl.kt:66)
	at io.klogging.NoCoLogger.emitEvent$default(NoCoLogger.kt:43)
	at io.klogging.NoCoLogger.log(NoCoLogger.kt:79)
	at io.klogging.impl.NoCoLoggerImpl.log(NoCoLoggerImpl.kt:41)
	at dev.slimevr.logging.LineLogger.write(standard-streams.kt:36)
	at java.io.OutputStream.write(OutputStream.java:167)
	at java.io.PrintStream.write(PrintStream.java:539)
	at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:220)
	at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:315)
	at sun.nio.cs.StreamEncoder.flushBuffer(StreamEncoder.java:101)
	at java.io.OutputStreamWriter.flushBuffer(OutputStreamWriter.java:179)
	at java.io.PrintStream.writeln(PrintStream.java:690)
	at java.io.PrintStream.println(PrintStream.java:1004)
	at io.klogging.internal.PrintErr_jvmKt.printErr(PrintErr.jvm.kt:21)
	at io.klogging.internal.InternalLoggingKt.log(InternalLogging.kt:64)
	at io.klogging.internal.InternalLoggingKt.warn(InternalLogging.kt:127)
	at io.klogging.internal.KloggingEngine_jvmKt.<clinit>(KloggingEngine.jvm.kt:28)
	at io.klogging.events.LogEvent.<init>(LogEvent.kt:51)
	at io.klogging.BaseLogger.eventFrom(BaseLogger.kt:108)
	at io.klogging.impl.KloggerImpl.eventFrom(KloggerImpl.kt:39)
	at io.klogging.impl.KloggerImpl.emitEvent(KloggerImpl.kt:57)
	at io.klogging.Klogger.emitEvent$default(Klogger.kt:48)
	at io.klogging.Klogger.log$suspendImpl(Klogger.kt:123)
	at io.klogging.Klogger.log(Klogger.kt:-1)
	at io.klogging.impl.KloggerImpl.log(KloggerImpl.kt:39)
	at io.klogging.Klogger.info$suspendImpl(Klogger.kt:323)
	at io.klogging.Klogger.info(Klogger.kt:-1)
	at io.klogging.impl.KloggerImpl.info(KloggerImpl.kt:39)
	at dev.slimevr.logging.LoggerKt.configureLogging(logger.kt:74)
	at dev.slimevr.logging.LoggerKt.configureLogging$default(logger.kt:48)
	at dev.slimevr.desktop.LoggingKt.setupDesktopLogging(logging.kt:13)
	at dev.slimevr.desktop.Main$main$1.invokeSuspend(Main.kt:62)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith$$$capture(ContinuationImpl.kt:34)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:-1)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:100)
	at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:263)
	at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:94)
	at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:70)
	at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source:1)
	at dev.slimevr.desktop.Main.main(Main.kt:61)
Exception 'java.lang.NullPointerException' occurred in thread 'main @mainSlimeVR#1' at java.io.PrintStream.write(PrintStream.java:542)
Breakpoint reached
	at java.io.PrintStream.write(PrintStream.java:542)
	at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:220)
	at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:315)
	at sun.nio.cs.StreamEncoder.flushBuffer(StreamEncoder.java:101)
	at java.io.OutputStreamWriter.flushBuffer(OutputStreamWriter.java:179)
	at java.io.PrintStream.writeln(PrintStream.java:690)
	at java.io.PrintStream.println(PrintStream.java:1004)
	at io.klogging.internal.PrintErr_jvmKt.printErr(PrintErr.jvm.kt:21)
	at io.klogging.internal.InternalLoggingKt.log(InternalLogging.kt:64)
	at io.klogging.internal.InternalLoggingKt.warn(InternalLogging.kt:127)
	at io.klogging.internal.KloggingEngine_jvmKt.<clinit>(KloggingEngine.jvm.kt:28)
	at io.klogging.events.LogEvent.<init>(LogEvent.kt:51)
	at io.klogging.BaseLogger.eventFrom(BaseLogger.kt:108)
	at io.klogging.impl.KloggerImpl.eventFrom(KloggerImpl.kt:39)
	at io.klogging.impl.KloggerImpl.emitEvent(KloggerImpl.kt:57)
	at io.klogging.Klogger.emitEvent$default(Klogger.kt:48)
	at io.klogging.Klogger.log$suspendImpl(Klogger.kt:123)
	at io.klogging.Klogger.log(Klogger.kt:-1)
	at io.klogging.impl.KloggerImpl.log(KloggerImpl.kt:39)
	at io.klogging.Klogger.info$suspendImpl(Klogger.kt:323)
	at io.klogging.Klogger.info(Klogger.kt:-1)
	at io.klogging.impl.KloggerImpl.info(KloggerImpl.kt:39)
	at dev.slimevr.logging.LoggerKt.configureLogging(logger.kt:74)
	at dev.slimevr.logging.LoggerKt.configureLogging$default(logger.kt:48)
	at dev.slimevr.desktop.LoggingKt.setupDesktopLogging(logging.kt:13)
	at dev.slimevr.desktop.Main$main$1.invokeSuspend(Main.kt:62)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith$$$capture(ContinuationImpl.kt:34)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:-1)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:100)
	at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:263)
	at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:94)
	at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:70)
	at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source:1)
	at dev.slimevr.desktop.Main.main(Main.kt:61)
Exception 'java.lang.NullPointerException' occurred in thread 'main @mainSlimeVR#1' at sun.nio.cs.StreamEncoder.flushBuffer(StreamEncoder.java:104)
Breakpoint reached
	at sun.nio.cs.StreamEncoder.flushBuffer(StreamEncoder.java:104)
	at java.io.OutputStreamWriter.flushBuffer(OutputStreamWriter.java:179)
	at java.io.PrintStream.writeln(PrintStream.java:690)
	at java.io.PrintStream.println(PrintStream.java:1004)
	at io.klogging.internal.PrintErr_jvmKt.printErr(PrintErr.jvm.kt:21)
	at io.klogging.internal.InternalLoggingKt.log(InternalLogging.kt:64)
	at io.klogging.internal.InternalLoggingKt.warn(InternalLogging.kt:127)
	at io.klogging.internal.KloggingEngine_jvmKt.<clinit>(KloggingEngine.jvm.kt:28)
	at io.klogging.events.LogEvent.<init>(LogEvent.kt:51)
	at io.klogging.BaseLogger.eventFrom(BaseLogger.kt:108)
	at io.klogging.impl.KloggerImpl.eventFrom(KloggerImpl.kt:39)
	at io.klogging.impl.KloggerImpl.emitEvent(KloggerImpl.kt:57)
	at io.klogging.Klogger.emitEvent$default(Klogger.kt:48)
	at io.klogging.Klogger.log$suspendImpl(Klogger.kt:123)
	at io.klogging.Klogger.log(Klogger.kt:-1)
	at io.klogging.impl.KloggerImpl.log(KloggerImpl.kt:39)
	at io.klogging.Klogger.info$suspendImpl(Klogger.kt:323)
	at io.klogging.Klogger.info(Klogger.kt:-1)
	at io.klogging.impl.KloggerImpl.info(KloggerImpl.kt:39)
	at dev.slimevr.logging.LoggerKt.configureLogging(logger.kt:74)
	at dev.slimevr.logging.LoggerKt.configureLogging$default(logger.kt:48)
	at dev.slimevr.desktop.LoggingKt.setupDesktopLogging(logging.kt:13)
	at dev.slimevr.desktop.Main$main$1.invokeSuspend(Main.kt:62)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith$$$capture(ContinuationImpl.kt:34)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:-1)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:100)
	at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:263)
	at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:94)
	at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:70)
	at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source:1)
	at dev.slimevr.desktop.Main.main(Main.kt:61)
Exception 'java.lang.NullPointerException' occurred in thread 'main @mainSlimeVR#1' at java.io.PrintStream.writeln(PrintStream.java:693)
Breakpoint reached
	at java.io.PrintStream.writeln(PrintStream.java:693)
	at java.io.PrintStream.println(PrintStream.java:1004)
	at io.klogging.internal.PrintErr_jvmKt.printErr(PrintErr.jvm.kt:21)
	at io.klogging.internal.InternalLoggingKt.log(InternalLogging.kt:64)
	at io.klogging.internal.InternalLoggingKt.warn(InternalLogging.kt:127)
	at io.klogging.internal.KloggingEngine_jvmKt.<clinit>(KloggingEngine.jvm.kt:28)
	at io.klogging.events.LogEvent.<init>(LogEvent.kt:51)
	at io.klogging.BaseLogger.eventFrom(BaseLogger.kt:108)
	at io.klogging.impl.KloggerImpl.eventFrom(KloggerImpl.kt:39)
	at io.klogging.impl.KloggerImpl.emitEvent(KloggerImpl.kt:57)
	at io.klogging.Klogger.emitEvent$default(Klogger.kt:48)
	at io.klogging.Klogger.log$suspendImpl(Klogger.kt:123)
	at io.klogging.Klogger.log(Klogger.kt:-1)
	at io.klogging.impl.KloggerImpl.log(KloggerImpl.kt:39)
	at io.klogging.Klogger.info$suspendImpl(Klogger.kt:323)
	at io.klogging.Klogger.info(Klogger.kt:-1)
	at io.klogging.impl.KloggerImpl.info(KloggerImpl.kt:39)
	at dev.slimevr.logging.LoggerKt.configureLogging(logger.kt:74)
	at dev.slimevr.logging.LoggerKt.configureLogging$default(logger.kt:48)
	at dev.slimevr.desktop.LoggingKt.setupDesktopLogging(logging.kt:13)
	at dev.slimevr.desktop.Main$main$1.invokeSuspend(Main.kt:62)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith$$$capture(ContinuationImpl.kt:34)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:-1)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:100)
	at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:263)
	at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:94)
	at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:70)
	at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source:1)
	at dev.slimevr.desktop.Main.main(Main.kt:61)
Exception 'java.lang.ExceptionInInitializerError' occurred in thread 'main @mainSlimeVR#1' at io.klogging.events.LogEvent.<init>(LogEvent.kt:51)
Breakpoint reached
	at io.klogging.events.LogEvent.<init>(LogEvent.kt:51)
	at io.klogging.BaseLogger.eventFrom(BaseLogger.kt:108)
	at io.klogging.impl.KloggerImpl.eventFrom(KloggerImpl.kt:39)
	at io.klogging.impl.KloggerImpl.emitEvent(KloggerImpl.kt:57)
	at io.klogging.Klogger.emitEvent$default(Klogger.kt:48)
	at io.klogging.Klogger.log$suspendImpl(Klogger.kt:123)
	at io.klogging.Klogger.log(Klogger.kt:-1)
	at io.klogging.impl.KloggerImpl.log(KloggerImpl.kt:39)
	at io.klogging.Klogger.info$suspendImpl(Klogger.kt:323)
	at io.klogging.Klogger.info(Klogger.kt:-1)
	at io.klogging.impl.KloggerImpl.info(KloggerImpl.kt:39)
	at dev.slimevr.logging.LoggerKt.configureLogging(logger.kt:74)
	at dev.slimevr.logging.LoggerKt.configureLogging$default(logger.kt:48)
	at dev.slimevr.desktop.LoggingKt.setupDesktopLogging(logging.kt:13)
	at dev.slimevr.desktop.Main$main$1.invokeSuspend(Main.kt:62)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith$$$capture(ContinuationImpl.kt:34)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:-1)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:100)
	at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:263)
	at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:94)
	at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:70)
	at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source:1)
	at dev.slimevr.desktop.Main.main(Main.kt:61)
Exception 'java.lang.ExceptionInInitializerError' occurred in thread 'main' at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:108)
Breakpoint reached
	at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:108)
	at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:70)
	at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source:1)
	at dev.slimevr.desktop.Main.main(Main.kt:61)
Exception 'java.lang.NoClassDefFoundError' occurred in thread 'main' at java.io.PrintStream.write(PrintStream.java:542)
Breakpoint reached
	at java.io.PrintStream.write(PrintStream.java:542)
	at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:220)
	at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:315)
	at sun.nio.cs.StreamEncoder.flushBuffer(StreamEncoder.java:101)
	at java.io.OutputStreamWriter.flushBuffer(OutputStreamWriter.java:179)
	at java.io.PrintStream.writeln(PrintStream.java:690)
	at java.io.PrintStream.println(PrintStream.java:1027)
	at java.lang.Throwable$WrappedPrintStream.println(Throwable.java:790)
	at java.lang.Throwable.printStackTrace(Throwable.java:697)
	at java.lang.Throwable.printStackTrace(Throwable.java:686)
	at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:579)
	at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:571)
	at java.lang.Thread.dispatchUncaughtException(Thread.java:2556)
Exception 'java.lang.NoClassDefFoundError' occurred in thread 'main' at sun.nio.cs.StreamEncoder.flushBuffer(StreamEncoder.java:104)
Breakpoint reached
	at sun.nio.cs.StreamEncoder.flushBuffer(StreamEncoder.java:104)
	at java.io.OutputStreamWriter.flushBuffer(OutputStreamWriter.java:179)
	at java.io.PrintStream.writeln(PrintStream.java:690)
	at java.io.PrintStream.println(PrintStream.java:1027)
	at java.lang.Throwable$WrappedPrintStream.println(Throwable.java:790)
	at java.lang.Throwable.printStackTrace(Throwable.java:697)
	at java.lang.Throwable.printStackTrace(Throwable.java:686)
	at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:579)
	at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:571)
	at java.lang.Thread.dispatchUncaughtException(Thread.java:2556)
Exception 'java.lang.NoClassDefFoundError' occurred in thread 'main' at java.io.PrintStream.writeln(PrintStream.java:693)
Breakpoint reached
	at java.io.PrintStream.writeln(PrintStream.java:693)
	at java.io.PrintStream.println(PrintStream.java:1027)
	at java.lang.Throwable$WrappedPrintStream.println(Throwable.java:790)
	at java.lang.Throwable.printStackTrace(Throwable.java:697)
	at java.lang.Throwable.printStackTrace(Throwable.java:686)
	at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:579)
	at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:571)
	at java.lang.Thread.dispatchUncaughtException(Thread.java:2556)
Exception 'java.lang.NoClassDefFoundError' occurred in thread 'main' at java.lang.Throwable.printStackTrace(Throwable.java:710)
Breakpoint reached
	at java.lang.Throwable.printStackTrace(Throwable.java:710)
	at java.lang.Throwable.printStackTrace(Throwable.java:686)
	at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:579)
	at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:571)
	at java.lang.Thread.dispatchUncaughtException(Thread.java:2556)
Disconnected from the target VM, address: 'localhost:35355', transport: 'socket'
…nded

# Conflicts:
#	gui/app/src/hooks/body-parts.ts
#	server/core/src/main/java/dev/slimevr/solarxr/rpc/resets.kt
#	solarxr-protocol
Remember to commit everything.

Add posterior processing.
Remember to commit everything.

Add posterior processing.
@ImSapphire
ImSapphire changed the base branch from main to server-rewrite September 23, 2026 18:14
Comment thread gui/app/public/i18n/en/translation.ftl Outdated

private fun getDeltaTimeSeconds(): Float {
val now =
System.nanoTime()

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use methods in time.kt along with the Kotlin Time

val baseRelative = hipRot.inv() * tailRot

val baseEuler = baseRelative.toEulerAngles(EulerOrder.XYZ)
val basePitch = Math.toDegrees(baseEuler.x.toDouble()).toFloat()

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instead of doing Math.toDegrees and having to cast twice, just multiply by FastMath.RAD_TO_DEG

return dt
}

companion object {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Given that all your constants are private, no need to use a companion object. Just have them at the top of the file; outside the class.

@Sebane1
Sebane1 force-pushed the main-extended branch 2 times, most recently from 15d6532 to 82a7293 Compare September 25, 2026 00:19
Sebane1 and others added 18 commits September 24, 2026 19:27
Co-authored-by: Erimel <marioluigivideo@gmail.com>
…rver into main-extended

# Conflicts:
#	gui/app/public/i18n/en/translation.ftl
…nded

# Conflicts:
#	gui/app/public/i18n/en/translation.ftl
#	gui/app/public/models/skeleton/chest.gltf
#	gui/app/public/models/skeleton/foot.gltf
#	gui/app/public/models/skeleton/head.gltf
#	gui/app/public/models/skeleton/upper_arm.gltf
#	gui/app/src/components/commons/BodyPartIcon.tsx
#	gui/app/src/components/commons/PersonFrontIcon.tsx
#	gui/app/src/components/onboarding/BodyPartAssignment.tsx
#	gui/app/src/components/onboarding/pages/body-proportions/HeightInput.tsx
#	gui/app/src/components/onboarding/pages/body-proportions/ScaledProportions.tsx
#	gui/app/src/components/settings/pages/components/ResetsSettings.tsx
#	gui/app/src/components/tracker/TrackerSettings.tsx
#	gui/app/src/components/widgets/SkeletonVisualizerWidget.tsx
#	gui/app/src/hooks/body-parts.ts
#	gui/app/src/hooks/onboarding.ts
#	gui/app/src/hooks/tracker-picker.ts
#	gui/app/src/utils/skeletonHelper.ts
#	gui/app/src/utils/skeletonMeshHelper.ts
#	gui/app/src/utils/skeletonParts.ts
#	server/core/src/main/java/dev/slimevr/config/settings.kt
#	server/core/src/main/java/dev/slimevr/event-dispatcher.kt
#	server/core/src/main/java/dev/slimevr/hid/behaviours/register.kt
#	server/core/src/main/java/dev/slimevr/resets/bodypart-sets.kt
#	server/core/src/main/java/dev/slimevr/resets/module.kt
#	server/core/src/main/java/dev/slimevr/skeleton/behaviours.kt
#	server/core/src/main/java/dev/slimevr/skeleton/bodypart-structure.kt
#	server/core/src/main/java/dev/slimevr/skeleton/computedprocessors/velocity.kt
#	server/core/src/main/java/dev/slimevr/skeleton/fkprocessors/localizer.kt
#	server/core/src/main/java/dev/slimevr/skeleton/inputprocessors/bone-direct-link.kt
#	server/core/src/main/java/dev/slimevr/skeleton/module.kt
#	server/core/src/main/java/dev/slimevr/skeleton/proportions.kt
#	server/core/src/main/java/dev/slimevr/skeleton/reducer.kt
#	server/core/src/main/java/dev/slimevr/skeleton/targetprocessors/floor-clip.kt
#	server/core/src/main/java/dev/slimevr/skeleton/targetprocessors/skating-correction.kt
#	server/core/src/main/java/dev/slimevr/solarxr/rpc/resets.kt
#	server/core/src/main/java/dev/slimevr/tracker/behaviours/calibration-refresh.kt
#	server/core/src/main/java/dev/slimevr/tracker/behaviours/to-skeleton.kt
#	server/core/src/main/java/dev/slimevr/tracker/module.kt
#	server/core/src/main/java/dev/slimevr/tracker/reducer.kt
#	server/core/src/main/java/dev/slimevr/tracker/session-calibration.kt
#	server/core/src/main/java/dev/slimevr/trackingchecklist/behaviours.kt
#	server/core/src/main/java/dev/slimevr/vmc/mapping.kt
#	server/core/src/main/java/dev/slimevr/vmc/output-encoder.kt
#	server/core/src/test/java/dev/slimevr/TestServer.kt
#	server/core/src/test/java/dev/slimevr/tracker/PolarityTrackingTest.kt
#	solarxr-protocol
…nded

# Conflicts:
#	.gitignore
#	gui/app/src/components/settings/SettingsSidebar.tsx
#	server/android/src/main/java/dev/slimevr/android/ForegroundService.kt
#	server/core/src/main/java/dev/slimevr/skeleton/proportions.kt
#	server/desktop/src/main/java/dev/slimevr/desktop/Main.kt
…nded

# Conflicts:
#	server/android/src/main/java/dev/slimevr/android/serial/serial.kt
#	server/core/src/main/java/dev/slimevr/skeleton/module.kt
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants