How To

Minecraft spotyka Stream Deck: w pełni funkcjonalna konstrukcja z Redstone

Last updated:

  Ta strona została automatycznie przetłumaczona przez DeepL. Switch to English

Nasza społeczność nigdy nie przestaje nas zaskakiwać pomysłowymi, kreatywnymi i po prostu zabawnymi konstrukcjami — a ta może być najlepsza z nich wszystkich. Ostatnio rozmawialiśmy o tym, jak Stream Deck pojawia się w coraz większej liczbie miejsc: dzięki modułom Stream Deck i wirtualnemu Stream Deck na komputerze. A teraz? Jest w Minecrafcie.

Inspiracja

Mniej więcej miesiąc temu specjalista społeczności Elgato opublikował na Twitterze Elgato projekt 15-przyciskowego Stream Deck w grze Minecraft. Ogarnięty duchem serdecznej rywalizacji, zacząłem zastanawiać się, jak przekształcić ten pomysł w rzeczywisty, funkcjonalny produkt. Chociaż to, co stworzyłem, nie jest idealne i ma tendencję do psucia się, jeśli spojrzy się na nie pod złym kątem, jestem bardzo zadowolony z rezultatów!

Ta wersja jest zasilana przez sześcioklawiszowy Virtual Stream Deck ukryty na moim drugim monitorze, z bardzo prowizorycznym skryptem Node.js obsługującym trudniejsze zadania związane z naciskaniem przycisków SD w zależności od tego, co jest aktywne w grze, a także konwertującym wyświetlacz VSD na format, który może być przedstawiony w grze Minecraft.

unnamed

W grze Minecraft wykorzystano niezwykle prostą konstrukcję z użyciem redstone'a. Za ekranem każdy przycisk wykorzystuje parę skalibrowanych czujników skulka (czujników dźwięku w grze) do monitorowania zdarzeń wejściowych, którymi w tym przypadku są albo śnieżki spadające na przycisk (siła sygnału 2), albo dźwięk wybuchającej ładunku wiatru (siła sygnału 15). Każda para prowadzi do pojedynczego bloku poleceń, który po uruchomieniu umieszcza od 1 do 8 spacji w czacie w grze. Przyciski stron w bok również mają niewielki dodatkowy obwód, który steruje lampkami sygnalizacyjnymi, ale poza tym działają identycznie.

Co się dzieje w moim skrypcie niestandardowym?

Większość magii dzieje się w niestandardowym skrypcie Node.js, który napisałem dla tego projektu. Podczas pierwszego uruchomienia programu uzyskuję specjalne informacje, które pozwalają mi wybrać okno Virtual Stream Deck (VSD) lub okno gry Minecraft, a następnie uzyskać współrzędne okna VSD. Po zakończeniu wszystkich ustawień uruchamiane są dwie pętle, które działają równolegle: pętla wejściowa i pętla wyświetlania.

Wprowadzanie danych do programu jest prostsze do zrozumienia. Za każdym razem, gdy uruchamia się Minecraft, zapisuje on najważniejsze informacje w pliku tekstowym o nazwie latest.log. Co ważne, plik ten zawiera również wszystkie wiadomości otrzymane na czacie, co oznacza, że przy pomocy sprytnego kodu możemy przeglądać tylko te wpisy, które zawierają nasze wiadomości składające się wyłącznie ze spacji. Kiedy pojawia się taka wiadomość, liczymy liczbę spacji i na tej podstawie określamy, który przycisk należy nacisnąć. Przyciski ułożyłem od góry do dołu, od lewej do prawej (są też dwa dodatkowe przyciski do przechodzenia do poprzedniej/następnej strony). Po wybraniu przycisku używam specjalistycznej biblioteki do automatyzacji pulpitu, aby bardzo szybko przenieść mysz poza okno Minecrafta, kliknąć odpowiedni przycisk na Virtual Stream Deck zasilającym całość i przywrócić kontrolę do Minecrafta (aby to zadziałało, należy nacisnąć F3+P, w przeciwnym razie gra zostanie wstrzymana, gdy straci fokus). Jeśli nie poruszasz myszą podczas tych czynności, wszystko przebiega płynnie! Jeśli tak, to zazwyczaj kończy się to fatalnie, lol.

To dobrze radzi sobie z naciskaniem przycisków, ale prawdziwą magią Stream Deck jest to, że pod każdym klawiszem znajduje się programowalny wyświetlacz. Jak to pokazać w Minecrafcie? Rozwiązanie, które wybrałem, nie jest może najelegantsze, ale działa, a to jest dla mnie najważniejsze! Cztery razy na sekundę skrypt robi zrzut ekranu okna VSD. Zakładając, że przyciski mają określony rozmiar (domyślny rozmiar 52x52 px sprawdza się całkiem dobrze), przycina zrzut ekranu do rozmiaru przycisku, a następnie zmienia jego rozmiar do 8x8 px. Następnie przechodzi przez każdy piksel w przycięty obraz i przetwarza go za pomocą sprytnego kodu, aby ustalić, który blok najbardziej pasuje do jego koloru. (Wielkie podziękowania dla kult0922 na GitHubie, który stworzył stronę internetową konwertującą obrazy na grafikę pikselową Minecrafta i opublikował jej kod źródłowy! Bez tego kodurealizacja tego projektu zajęłaby prawdopodobnie znacznie więcej czasu). Wystarczy powtórzyć tę czynność dla pozostałych pięciu przycisków.

Uzyskanie listy potrzebnych bloków to dobry krok, ale wprowadzenie ich do gry nadal stanowi problem. Jeśli masz możliwość uruchamiania poleceń czatu, możesz użyć polecenia /setblock, aby zaktualizować każdy piksel po jednym na raz, ale jest to bardzo powolne i nieefektywne. Lepszym narzędziem byłby Structure Block, narzędzie dostępne w podstawowej wersji gry, które między innymi pozwala umieszczać w świecie gry gotowe "schematy" struktur. Wymyśliłem, jak sprawić, aby mój skrypt tworzył schematy w sposób oczekiwany przez Minecrafta, a po zapisaniu ich w folderze schematów mogę wydać polecenie czatu, które nakazuje blokowi struktury w grze spojrzeć na schemat odpowiadający aktualnemu stanowi ekranu (każda pojedyncza klatka musi mieć unikalną nazwę pliku, co nieco komplikuje sprawę). Gdy to zrobisz, wystarczy mały obwód redstone, który wielokrotnie wkleja aktywny schemat do świata, i masz działający ekran!

Wnioski

W końcu masz w większości użyteczny Stream Deck, ale w Minecrafcie! Chociaż mój skrypt jest przeznaczony głównie do działania na moim komputerze, nie widzę powodu, dla którego nie można go ulepszyć, aby działał na serwerach dla wielu graczy! Oryginalny prototyp tego projektu działał na instancji Stream Deck Mobile uruchomionej w systemie Windows Subsystem for Android, co technicznie oznacza, że można uruchomić wszystko na całkowicie oddzielnym urządzeniu lub w maszynie wirtualnej. Czy to dobry pomysł, to oczywiście zupełnie inna kwestia... ale nie pozwól, aby obawy dotyczące "praktyczności" powstrzymały Cię przed zabawą :)

Ciekawostka: logo Stream Deck u góry zostało stworzone przy użyciu 24 map. Struktura logo znajduje się w pustce End, ale jest tak duża, że rozciąga się niemal od jednego końca pustki do drugiego.

unnamed (1)

Zobacz więcej prac TheAppleFreak:

REJESTRACJA PRODUKTÓW