Repository navigation
Releases: LiteLDev/BeDD
Releases · LiteLDev/BeDD
Release list
v0.3.1
v0.3.0
Changed
- Renamed to Be.D.D. (Bedrock Deep Dive), after the H.D.D. of Zenless Zone Zero. The repository is
LiteLDev/BeDDand the lip packagegithub.com/LiteLDev/BeDD; everything else follows, with no aliases for the old names:- mod folder and DLL
mods\BeDD\BeDD.dll, build outputbin\BeDD\, release assetbedd-client-windows-x64.zip; - control pipe
\\.\pipe\BeDD(configpipeNamedefault) and manager pipe\\.\pipe\BeDD-Manager-<session id>; - client
BeDD.psm1withConnect-BeDD,Disconnect-BeDD,Test-BeDD,Invoke-BeDD,Clear-BeDDInputand*-BeDD*for every other*-Headless*cmdlet (Send-BeDDKey,Get-BeDDState, …);Start-BeDDGame.ps1,BeDDManager.ps1; - harness shim
Install-BeDDMod,Uninstall-BeDDMod,Register-BeDDNative; - environment variables
BEDD_LABEL,BEDD_MANAGER,BEDD_PIPE,BEDD_RETURN_FOCUS; harnesses useBEDD_DIRin place ofLEVI_HEADLESS_INPUT_DIR.
- mod folder and DLL
Added
- Config
mute(defaulttrue): in background mode the game is silent. The mod hides focus loss from the game, so it never paused its audio, and headless games played menu music and sounds on the user's speakers. Taking a game over makes it audible again;statereportsaudio.
Fixed
- A console window flashed on the desktop at every game start: LeviLamina starts its crash logger,
CrashLogger.exe, as a console program, and the game has no console to give it.Install-BeDDModandStart-BeDDGame.ps1(for background games) switch the instance's LeviLamina to its built-in crash logger (modules.crashLogger.builtin).
v0.2.0
Added
- The manager window (
HeadlessManager.ps1): one per logon session, started by the firstStart-HeadlessGame.ps1(or the shim'sStart-Game) and reused by every later run. Every headless game shows up there as a live picture instead of as a window of its own (off screen, no taskbar button, not in Alt+Tab), labelled with the project and worktree that started it. Closing the manager closes all its games (also when it is killed); right-click a game to take it over with the real mouse and keyboard, hand it back, open its log or close it.-List,-Game <pid> -Action show|hide|closeand-Shutdowndo the same from scripts. Configmanager(defaulttrue),Start-HeadlessGame.ps1 -Label/-NoManager,Install-HeadlessInputMod -NoManager,LEVI_HEADLESS_MANAGER=0. pingandstatereportmanagedandtakenOver.statereportsserverQueriesRefused, and GameInput statistics reportvirtualReadings.
Fixed
- A game could take the foreground for a moment when it started (with background mode on): the "focus gained" messages the mod sends activated the window when the game had been started from the user's foreground app (a terminal, an agent). They no longer activate it, and the user32 hooks are in place before the game creates its window.
enable()could still hang for good while installing the hooks, most often with several games starting at once: a thread stopped by the hook pause while holding the process heap lock blocked the hooking code. The heap stays locked while the threads are paused now.- Virtual clicks, wheel and camera were lost while nobody touched the real mouse (unattended runs stayed on the title screen with Play highlighted): GameInput has no mouse reading until the device reports input. The game now gets a virtual reading of the device instead.
- With
loopbackOnly, a game could join a "LAN world" instead of the test world and hang at "Connecting to multiplayer game" (~97%): game servers queried through a proxy on the PC were listed as LAN worlds ahead of the test world. Game servers outside the PC are no longer queried. - With
loopbackOnly, outgoing TCP connections (WinHTTP) were bound to loopback and reached the internet only through a proxy on the PC. They are left alone now. loopbackOnlystays in force after the game is handed back (Set-HeadlessBackground $false, Ctrl+Shift+F12): sockets opened afterwards raised the firewall prompt.
v0.1.3
Added
- A logo, and a recording of three games driven at once in the background, in the LeviMC Mods gallery.
Changed
- The README is rewritten for people writing test scripts. How it works inside, the pipe protocol and build notes moved to CONTRIBUTING.md.
v0.1.2
Added
-
Loopback-only sockets (
loopbackOnly, on by default): in background modebind()to 0.0.0.0/:: is turned into a loopback bind, so a new game instance (a new exe path) no longer raises the Windows Firewall "allow access" prompt that stopped unattended runs. Outgoing connections (local servers, the internet) are unaffected; nothing outside the PC can reach a test game.statereportsloopbackRebinds. -
Safety net in the
Start-Gamewrapper: worlds of the instance written in the last 15 minutes (the test world a harness just restored) are made single-player before the game starts, so a harness that forgotSet-WorldSinglePlayerno longer breaks other projects' parallel runs with "Blaze". Older worlds are never touched.
v0.1.1
Added
- Exclusive signaling lock also waits until no
Minecraft.Windowsprocess is left, so games started outside the lock cannot break online-multiplayer runs. - Machine-wide signaling lock in
harness-shim.ps1: every headless game holds it shared fromStart-GametoStop-Game; runs that join a server over NetherNet set$script:ExclusiveSignaling = $trueand get the machine to themselves (each game's sign-in to the signaling service knocks out the previous one).
Fixed
- Virtual mouse clicks, wheel notches and camera moves arrived once per mouse device (twice on a PC with two mice): the virtual state now goes to one device and the others report idle.
enable()could hang while installing the hooks: all hooks of a batch are now installed during a single thread pause, and nothing is logged while threads are paused.
v0.1.0
Added
- Control pipe (
\.\pipe\<pipeName>, JSON lines) withping,state,key,text,mouse,raw,release,focus,window,backgroundandflush; input ops reply once the game thread has processed the input. - Keyboard, text and pointer position dispatched through the game's own window procedure (subclassed window).
- Virtual GDK GameInput mouse (v2
IGameInputReadinghooks): buttons, wheel and camera in menus and in the world; the real mouse and keyboard no longer reach a background game. - Background mode: focus-loss messages swallowed (no pause), real client-area input swallowed,
ClipCursor/SetCursorPos/GetCursorPos/GetAsyncKeyState/GetKeyState/GetKeyboardState/GetForegroundWindow/... report a virtual state, window activation hooks keep the game out of the foreground. Ctrl+Shift+F12 on the real keyboard turns it off. - PowerShell client
HeadlessInput.psm1(input, screenshots viaPrintWindow, per-instance pipes). harness-shim.ps1: drop-in replacement of the usual LeviLauncher harness helpers, plus redirects for harness C# input classes andSet-WorldSinglePlayer(parallel instances share one signaling-service ID and knock each other out of multiplayer worlds: "An error has occurred", code "Blaze").Start-HeadlessGame.ps1(start an instance without activating it) andclone-instance.ps1(cheap clone instances for parallel games).- Trace mode: message, API-hook and GameInput statistics, and every input event that reaches the game, marked synthetic or real.