Repository navigation
Releases: LiteLDev/LeviHeadlessInput
Releases · LiteLDev/LeviHeadlessInput
Release list
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.