Onze community blijft indruk maken met slimme, creatieve en ronduit leuke bouwwerken, en deze spant misschien wel de kroon (blok?). Onlangs hebben we het gehad over hoe Stream Deck op steeds meer plaatsen opduikt: met Stream Deck-modules en Virtual Stream Deck op je computer. Maar nu? Nu is het ook in Minecraft.
Ongeveer een maand geleden plaatste een Elgato-communityspecialist een Minecraft-versie van een Stream Deck met 15 toetsen op de Twitter-pagina van Elgato. Bezield door de geest van vriendschappelijke rivaliteit, begon ik uit te zoeken hoe ik dit concept in de praktijk kon brengen. Hoewel mijn creatie bij lange na niet perfect is en de neiging heeft om kapot te gaan als je er verkeerd naar kijkt, ben ik meer dan tevreden met het resultaat!
Deze build wordt aangedreven door een Virtual Stream Deck met zes toetsen dat stiekem op mijn andere monitor is verborgen, met een zeer hacky Node.js-script dat de moeilijke taken uitvoert, zoals het indrukken van SD-knoppen op basis van wat er in het spel is geactiveerd, en het omzetten van de VSD-weergave naar iets dat in Minecraft kan worden weergegeven.
Aan de Minecraft-kant is de redstone buitengewoon eenvoudig. Achter het scherm gebruikt elke knop een paar gekalibreerde sculk-sensoren (in-game geluidssensoren) om invoergebeurtenissen te detecteren, in dit geval sneeuwballen die op de knop landen (signaalsterkte 2) of het geluid van een exploderende windlading (signaalsterkte 15). Elk paar leidt naar een enkel commandoblok dat, wanneer het wordt geactiveerd, 1 tot 8 spaties in de in-game chat plaatst. De knoppen voor pagina terug/vooruit aan de zijkanten hebben ook een klein beetje extra schakelingen die de indicatielampjes aansturen, maar verder functioneren ze identiek.
Het grootste deel van de magie gebeurt in het aangepaste Node.js-script dat ik voor dit project heb geschreven. Bij het opstarten van het programma krijg ik speciale informatie waarmee ik een Virtual Stream Deck (VSD)-venster of het Minecraft-spelvenster kan selecteren en vervolgens de coördinaten van het VSD-venster kan ophalen. Zodra alle instellingen zijn voltooid, worden er twee loops tegelijk uitgevoerd: invoer en weergave.
De invoerhelft van het programma is het eenvoudigst te begrijpen. Wanneer Minecraft wordt uitgevoerd, wordt een logbestand bijgehouden met de belangrijkste gebeurtenissen in een tekstbestand met de toepasselijke naam latest.log. Belangrijk is dat dit logbestand ook alle berichten bevat die in de chat zijn ontvangen, wat betekent dat we met een beetje slimme code alleen de logboekvermeldingen kunnen bekijken die onze berichten met alleen spaties bevatten. Wanneer zo'n bericht binnenkomt, tellen we het aantal spaties en gebruiken we dat om te bepalen op welke knop we moeten drukken. Ik heb de knoppen van boven naar beneden en van links naar rechts gerangschikt (er zijn ook twee extra knoppen voor pagina terug/vooruit). Zodra we de knop hebben geselecteerd, gebruik ik een gespecialiseerde desktopautomatiseringsbibliotheek om de muis heel snel uit het Minecraft-venster te verplaatsen, op de overeenkomstige knop op het Virtual Stream Deck te klikken dat alles aanstuurt, en deze terug te brengen naar de besturing van Minecraft (je moet F3+P indrukken om dit te laten werken; anders wordt het spel gepauzeerd wanneer het de focus verliest). Als je de muis niet beweegt wanneer deze handelingen plaatsvinden, verloopt het vrijwel naadloos! Als dat zo is, breekt het vaak op een vreselijke manier, haha.
Dat werkt prima voor het indrukken van knoppen, maar het echte voordeel van het Stream Deck is dat je onder elke toets een programmeerbaar display hebt. Hoe laat je dat zien in Minecraft? De oplossing die ik heb gekozen is misschien niet de meest elegante, maar het werkt, en dat is wat ik belangrijk vind! Vier keer per seconde maakt het script een screenshot van het VSD-venster. Ervan uitgaande dat de knoppen een bepaalde grootte hebben (de standaardgrootte van 52x52 px werkt heel goed), snijdt het de screenshot bij tot alleen de grootte van een knop en past het vervolgens het formaat aan naar 8x8 px. Zodra dat is gebeurd, gaat het script elke pixel in de bijgesneden afbeelding langs en voert het een slimme code uit om te bepalen welk blok het beste bij de kleur past. (Veel dank aan kult0922 op GitHub, die een website heeft gemaakt die afbeeldingen omzet naar Minecraft-pixelkunst en de broncode daarvoor heeft gepubliceerd! Zonder die code zou dit project waarschijnlijk een stuk langer hebben geduurd). Herhaal dit gewoon voor de andere vijf knoppen.
Het is een goede stap om de lijst met blokken te verzamelen die je nodig hebt, maar het is nog steeds een probleem om ze in het spel te krijgen. Als je een manier hebt om chatcommando's uit te voeren, kun je het commando /setblock een aantal keer gebruiken om elke pixel één voor één bij te werken, maar dat is erg traag en inefficiënt. Een betere tool is Structure Block, een tool in het basisspel waarmee je onder andere vooraf gemaakte 'schema's' van structuren in de spelwereld kunt plaatsen. Ik heb uitgevonden hoe ik mijn script schema's kan laten maken op de manier die Minecraft verwacht, en zodra ze zijn opgeslagen in de map met schema's, kan ik een chatcommando geven dat de Structure Block in het spel vertelt om naar het juiste schema voor de huidige staat van het scherm te kijken (elk afzonderlijk frame moet een unieke bestandsnaam hebben, wat het een beetje ingewikkeld maakt). Als dat eenmaal is gebeurd, hoef je alleen nog maar een klein redstone-circuit te gebruiken om de actieve schets herhaaldelijk in de wereld te plakken, en je hebt een werkend scherm!
Aan het einde van de dag heb je een grotendeels bruikbare Stream Deck, maar dan in Minecraft! Hoewel mijn script in de eerste plaats is ontworpen om alleen op mijn computer te draaien, zie ik geen reden waarom het niet kan worden verbeterd om misschien op multiplayerservers te draaien! Het oorspronkelijke prototype van dit project draaide eigenlijk op een instantie van Stream Deck Mobile in Windows Subsystem for Android, wat technisch gezien betekent dat je alles op een volledig apart apparaat of in een virtuele machine zou kunnen draaien. Of dat een goed idee is, is natuurlijk een heel andere vraag... maar laat je niet tegenhouden door zorgen over 'praktisch nut' :)
Leuk weetje: het Stream Deck-logo bovenaan is gemaakt met behulp van 24 kaarten. De structuur van het logo bevindt zich in de End-void, maar het is zo groot dat het zich bijna van het ene uiteinde van de void tot het andere uitstrekt.
Bekijk meer werk van TheAppleFreak:
PRODUCTEN IN ARTIKEL