67f8f46cab10bb31c2c483de51e7986cdaa1e806
buildTree() cleared and refilled the children and client lists inside the shared channel nodes, so a UI still walking the previous tree could see them change under it. It now builds new lists and publishes them unmodifiable. The node fields, written by the event and audio threads and read by the UI, are volatile. Whether a channel is full is now counted from the model, rather than from a tree that may not have been rebuilt since the last join. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Description
A reimplementation of TeamSpeak 3 in Java
TS3
Latest
Languages
Java
85.5%
Kotlin
13.3%
C++
0.6%
Python
0.5%