How To

Minecraft möter Stream Deck: En fullt fungerande Redstone-konstruktion

Last updated:

  Denna sida har automatiskt översatts av DeepL. Switch to English

Vår community imponerar alltid med smarta, kreativa och riktigt roliga konstruktioner – och den här tar kanske priset (blocket?). Nyligen har vi pratat om hur Stream Deck dyker upp på fler ställen än någonsin: med Stream Deck-moduler och Virtual Stream Deck på din dator. Men nu? Nu finns det i Minecraft.

Inspiration

För ungefär en månad sedan publicerade en Elgato-communityspecialist en Minecraft-modell av ett Stream Deck med 15 tangenter på Elgatos Twitter. Besatt av en anda av vänskaplig tävlingslust började jag fundera på hur jag kunde förverkliga denna idé. Det jag skapade är långt ifrån perfekt och har en tendens att gå sönder om man tittar på det på fel sätt, men jag är mer än nöjd med resultatet!

Denna version drivs av ett Virtual Stream Deck med sex tangenter som är gömt på min andra skärm, med ett mycket hackigt Node.js-skript som hanterar de svåra delarna av att trycka på SD-knapparna baserat på vad som är aktiverat i spelet, samt konverterar VSD-displayen till något som kan visas i Minecraft.

unnamed

På Minecraft-sidan är redstone-tekniken extremt enkel. Bakom skärmen använder varje knapp ett par kalibrerade sculk-sensorer (ljudsensorer i spelet) för att övervaka ingångshändelser, som i detta fall är antingen snöbollar som landar på knappen (signalstyrka 2) eller ljudet av en vindladdning som exploderar (signalstyrka 15). Varje par leder till ett enda kommandoblock som, när det utlöses, lägger in mellan 1 och 8 mellanslag i chatten i spelet. Knapparna för att bläddra framåt och bakåt på sidorna har också en liten extra krets som styr indikatorlamporna, men i övrigt fungerar de på samma sätt.

Vad händer i mitt anpassade skript?

Det mesta av magin sker i det anpassade Node.js-skript som jag skrev för detta projekt. När programmet startas får jag viss specialinformation som gör att jag kan välja mellan ett Virtual Stream Deck-fönster (VSD) eller Minecraft-spelfönstret, och sedan får jag också koordinaterna för VSD-fönstret. När all installation är klar körs två loopar parallellt: inmatning och visning.

Den första halvan av programmet är den enklaste att förstå. När Minecraft körs sparar det en loggfil med de viktigaste händelserna i en textfil med det passande namnet latest.log. Det är viktigt att notera att denna loggfil även innehåller alla meddelanden som tas emot i chatten, vilket innebär att vi med lite smart kod kan titta på endast de loggposter som innehåller våra meddelanden som endast består av mellanslag. När ett sådant meddelande kommer räknar vi antalet mellanslag och använder det för att avgöra vilken knapp som ska tryckas. Jag har ordnat knapparna uppifrån och ner, från vänster till höger (det finns också två extra knappar för att bläddra framåt och bakåt). När vi har valt knapp använder jag ett specialiserat bibliotek för automatisering av skrivbordet för att mycket snabbt flytta musen ut ur Minecraft-fönstret, klicka på motsvarande knapp på Virtual Stream Deck som driver allt och återföra den till Minecrafts kontroll (du måste trycka på F3+P för att detta ska fungera, annars pausas spelet när det förlorar fokus). Om du inte rör musen när dessa åtgärder utförs är det ganska smidigt! Om du är det, tenderar det att gå sönder på ett fruktansvärt sätt, lol.

Det fungerar bra för att trycka på knappar, men det verkligt magiska med Stream Deck är att du har en programmerbar skärm under varje tangent. Hur visar man det i Minecraft? Den lösning jag valde är kanske inte den elegantaste, men den fungerar, och det är det viktigaste för mig! Fyra gånger per sekund tar skriptet en skärmdump av VSD-fönstret. Förutsatt att knapparna har en viss storlek (standardstorleken 52x52 px fungerar ganska bra) beskärs skärmdumpen till knappens storlek och ändras sedan till 8x8 px. När det är klart går det igenom varje pixel i den beskärda bilden och kör dem genom en smart kod för att ta reda på vilken block som matchar dess färg bäst. (Stort tack till kult0922 på GitHub, som har skapat en webbplats som konverterar bilder till Minecraft-pixelkonst och publicerat källkoden för den! Utan den koden hade det här projektet troligen tagit betydligt längre tid att lista ut). Se bara till att upprepa proceduren för de andra fem knapparna.

Att få fram listan över block du behöver är ett bra steg, men att få in dem i spelet är fortfarande ett problem. Om du har möjlighet att köra chattkommandon kan du använda kommandot /setblock flera gånger för att uppdatera varje pixel en i taget, men det är väldigt långsamt och ineffektivt. Ett bättre verktyg att använda är Structure Block, ett verktyg i vanliga spelet som bland annat låter dig placera fördefinierade "scheman" av strukturer i spelvärlden. Jag har listat ut hur jag kan få mitt skript att skapa scheman på det sätt som Minecraft förväntar sig, och när de har sparats i schemamappen kan jag ge ett chattkommando som säger åt Structure Block i spelet att titta på rätt schema för skärmens aktuella tillstånd (varje enskild ram måste ha ett unikt filnamn, vilket komplicerar saker och ting lite). När det är klart behöver du bara en liten redstone-krets som upprepade gånger klistrar in den aktiva schematiken i världen, och du har en fungerande skärm!

Slutsats

I slutändan har du ett i stort sett användbart Stream Deck, men i Minecraft! Mitt skript är främst utformat för att köras på min dator, men jag ser ingen anledning till varför det inte skulle kunna förbättras så att det kan köras på multiplayerservrar! Den ursprungliga prototypen av detta projekt kördes faktiskt på en instans av Stream Deck Mobile som kördes i Windows Subsystem för Android, vilket tekniskt sett innebär att du kan köra allt på en helt separat enhet eller i en virtuell maskin. Om det är en bra idé är förstås en helt annan fråga... men låt inte praktiska överväganden hindra dig från att leka lite :)

Rolig fakta: Stream Deck-logotypen högst upp har skapats med hjälp av 24 kartor. Logotypens struktur finns i End void, men den är så stor att den sträcker sig nästan från ena änden av void till den andra.

unnamed (1)

Se mer av TheAppleFreaks arbete:

PRODUKTREGISTRERING