Skip to content

Releases: LiteLDev/BeDD

v0.3.1

Choose a tag to compare

@github-actions github-actions released this 30 Oct 00:22

Changed

  • The package is listed as Be.D.D. (tooth.json info.name), on LeviMC Mods too.

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 30 Oct 00:12

Changed

  • Renamed to Be.D.D. (Bedrock Deep Dive), after the H.D.D. of Zenless Zone Zero. The repository is LiteLDev/BeDD and the lip package github.com/LiteLDev/BeDD; everything else follows, with no aliases for the old names:
    • mod folder and DLL mods\BeDD\BeDD.dll, build output bin\BeDD\, release asset bedd-client-windows-x64.zip;
    • control pipe \\.\pipe\BeDD (config pipeName default) and manager pipe \\.\pipe\BeDD-Manager-<session id>;
    • client BeDD.psm1 with Connect-BeDD, Disconnect-BeDD, Test-BeDD, Invoke-BeDD, Clear-BeDDInput and *-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 use BEDD_DIR in place of LEVI_HEADLESS_INPUT_DIR.

Added

  • Config mute (default true): 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; state reports audio.

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-BeDDMod and Start-BeDDGame.ps1 (for background games) switch the instance's LeviLamina to its built-in crash logger (modules.crashLogger.builtin).

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 29 Oct 09:42

Added

  • The manager window (HeadlessManager.ps1): one per logon session, started by the first Start-HeadlessGame.ps1 (or the shim's Start-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|close and -Shutdown do the same from scripts. Config manager (default true), Start-HeadlessGame.ps1 -Label/-NoManager, Install-HeadlessInputMod -NoManager, LEVI_HEADLESS_MANAGER=0.
  • ping and state report managed and takenOver.
  • state reports serverQueriesRefused, and GameInput statistics report virtualReadings.

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.
  • loopbackOnly stays in force after the game is handed back (Set-HeadlessBackground $false, Ctrl+Shift+F12): sockets opened afterwards raised the firewall prompt.

v0.1.3

Choose a tag to compare

@github-actions github-actions released this 24 Oct 10:52

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

Choose a tag to compare

@github-actions github-actions released this 23 Oct 00:45

Added

  • Loopback-only sockets (loopbackOnly, on by default): in background mode bind() 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. state reports loopbackRebinds.

  • Safety net in the Start-Game wrapper: 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 forgot Set-WorldSinglePlayer no longer breaks other projects' parallel runs with "Blaze". Older worlds are never touched.

v0.1.1

Choose a tag to compare

@github-actions github-actions released this 22 Oct 17:37

Added

  • Exclusive signaling lock also waits until no Minecraft.Windows process 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 from Start-Game to Stop-Game; runs that join a server over NetherNet set $script:ExclusiveSignaling = $true and 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

Choose a tag to compare

@github-actions github-actions released this 22 Oct 15:36

Added

  • Control pipe (\.\pipe\<pipeName>, JSON lines) with ping, state, key, text, mouse, raw, release, focus, window, background and flush; 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 IGameInputReading hooks): 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 via PrintWindow, per-instance pipes).
  • harness-shim.ps1: drop-in replacement of the usual LeviLauncher harness helpers, plus redirects for harness C# input classes and Set-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) and clone-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.