Professional Documents
Culture Documents
Lekcja 23 - MC Java
Lekcja 23 - MC Java
Witaj ponownie!
Skończyliśmy tworzenie bloku generującego wieżę, czas na dodanie do niego nowych
funkcjonalności. Oprócz tego na dzisiejszej lekcji dodamy do naszego moda ranged item,
czyli przedmiot miotający!
Zaczynajmy!
Pierwszym krokiem jest nazwanie przedmiotu. Żeby zachować spójność z zeszłymi lekcjami,
proponujemy nazwę Wand, czyli różdżka po angielsku.
Czas by omówić interfejs tworzenia przedmiotu miotanego!
Na samej górze, masz dostęp do wyboru tekstury naszego przedmiotu. Mieliśmy już okazję
omawiać tą opcję podczas lekcji 17 (strona 4.).
Linijka Item model pozwala na wybranie innego niż standardowego modelu, który określa
wygląd przedmiotu. W ramach naszych zajęć pozostawimy tą opcję niezmienioną na
wartości Normal.
In-game name określa nazwę wyświetlaną przy wyborze przedmiotu w ekwipunku gry.
Domyślne jest ona ustawiona na nazwę, którą wpisaliśmy przy tworzeniu przedmiotu i
możemy nią dowolnie manipulować.
Special information about the ranged item umożliwia określenie podpowiedzi, które
wyświetlą się po najechaniu kursorem na przedmiot podczas gry.
Creative inventory tab pozwala na zmianę zakładki ekwipunku, w której pojawi się
przedmiot.
Item animation daje możliwość wyboru animacji, która będzie się odtwarzała podczas
użycia przedmiotu podczas rozgrywki.
Max stack size ustawia maksymalną liczbę przedmiotu w stacku.
Damage vs mob/animal - ta opcja umożliwia określenie, czy przedmiot będzie zadawał
obrażenia, gdy użyjesz go lewym przyciskiem myszy.
Item for ammo pozwala na wybór amunicji, którą będzie wykorzystywał przedmiot.
Pozostawienie opcji pustej, sprawi, że przedmiot nie będzie potrzebował amunicji.
Shoot constantly when active przełącza możliwość ciągłego strzału przy przytrzymaniu
prawego przycisku myszy. Domyślnie ta opcja jest wyłączona.
Item usage count określa liczbę użyć przedmiotu wykonanych przed jego zniszczeniem.
Ranged action sound określa dźwięk, który będzie wydany podczas użycia przedmiotu.
Enable glowing effect - zaznaczenie tej opcji sprawi, że tworzony item będzie miał efekt
poświaty.
W tym oknie będziesz ustawiać opcje pocisku, który pojawi się po użyciu różdżki.
Bullet power - opcja określająca z jaką siłą zostanie wystrzelony pocisk. Ustawienie tutaj
wartości 1 sprawi, że pocisk z różdżki będzie leciał na taką samą odległość jak strzała z
łuku.
Bullet damage - określa obrażenia zadawane przez pocisk z różdżki.
Bullet knockback - odrzut przeciwnika, spowodowany trafieniem pociskiem.
Has bullet particles - zaznaczenie tej opcji doda efektu cząsteczkowe do wystrzelonego
pocisku.
Does bullet ignite fire? - opcja określa czy pocisk będzie podpalał blok, który zostanie
trafiony pociskiem.
Item representing texture of a bullet - określa teksturę, jaką będzie miał lecący pocisk.
Bullet model - ustawienie bardzo podobne do Item model z poprzedniego ekranu. Tutaj
również można wybrać inny niż standardowy model pocisku. Tak jak w przypadku Item
model, tą opcję pozostaw niezmienioną.
Model texture pozwala na wybór tekstury pocisku, jeżeli wybrano opcję inną niż Default w
linijce z Bullet model.
Pamiętaj, że przedstawionymi opcjami warto się pobawić, sprawdzić różne kombinacje, tak,
żeby przedmiot był dla Ciebie jak najbardziej atrakcyjny! Każda z opcji ma również ikonę
znaku zapytania , po kliknięciu której masz dostęp do opisu i przykładowych ustawień.
Teraz musimy sprawić, aby nasza różdżka pojawi się w ogóle w grze. Naszym stołem
warsztatowym będzie stworzona ostatnio przez nas wieża, ale żeby była w stanie pełnić tę
funkcję, będziemy musieli nieco ją zmodyfikować. Po pierwsze dodajmy na szczyt wieży coś
nietypowego, co normalnie nie znajdzie się na takiej wysokości, np. skałę macierzystą czyli
BEDROCK.
Do ustawiania bloku skały macierzystej posłuży nam linijka:
world.setBlockState(new BlockPos(X, Y, Z), Blocks.BEDROCK.getDefaultState(), 3);
Pora zapoznać się z nowym elementem kodu! Dodaliśmy do naszej wieży BEDROCK, ale
nie może nam wystarczyć, aby ruda znalazła się na bloku skały macierzystej, by zamieniać
się w różdżkę. Musimy jednocześnie spełnić dwa warunki. Jednym z nich jest właśnie blok
skały macierzystej pod rudą, ale drugi, po to nam właśnie była wieża, będzie odpowiednia
wysokość. Połączymy zatem dwa warunki przy pomocy symbolu &&. Na początku, ta
konstrukcja może się wydawać trochę nietypowa, ale jest to nic innego niż, dobrze znany z
konstruktora kodów operator logicznego i.
Finalnie korzystając z && nasza instrukcja warunkowa powinna przyjąć poniższą postać jak
poniżej, dopisując ją do istniejących.
Czas naszą wieżę przerobić na stół warsztatowy, czyli musimy utworzyć pierwszą recepturę
ale, w kodzie. Ustalmy, że receptura na naszą różdżkę to 3 bloki naszej rudy ułożone po
skosie. Żeby nie sprawdzać czy stoimy w dobrą stronę będziemy musieli ustalić dwie
receptury, robiące to samo. Blok środkowy według napisanego przed chwilą warunku już
jest, pora na bloki na krańcach linii. Żeby ułatwić spojrzenie na to zadanie poniżej obrazek z
małym wyjaśnieniem.
Niebieska i czerwona linia pokazują receptury. A więc powinniśmy sprawdzić czy bloki rudy,
poza środkiem, na bloku skały macierzystej, znajdują się także na miejscach 1 i 2 lub 3 i 4.
Wyjdzie z nam tego całkiem spory warunek, więc spróbujmy go zrobić tak, aby był jak
najbardziej przejrzysty. Możemy to tego wykorzystać metodę, którą przygotowano specjalnie
do sprawdzania, czy w danym miejscu jest ruda, musisz jedynie w miejscu <NazwaRudy>
wstawić swoją nazwę.
public static boolean isOre(double x, double y, double z) {
return true;
return false;
Zwróć uwagę na typ tej metody - to boolean. Znasz ten typ bardzo dobrze, mimo że nie
korzystaliśmy z niego bezpośrednio pod jego nazwą. Oznacza on bowiem prawdę/fałsz.
Każdy warunek, który napisaliśmy, mógł być właśnie prawdą lub fałszem, czyli odpowiednio
true lub false. Korzystając z tego typu jednoznacznie możemy określić, czy coś jest
prawdziwe czy też nie. Tak więc na pytanie zadane metodą isOre (czy jest ruda?)
odpowiemy true jeżeli ruda znajduje się w podanym miejscu i false, jeżeli tej rudy nie ma.
Dodamy na szybko, podobnie jak w przypadku tworzenia podłogi wieży pętle czyszczące
nasz obszar z bloków, żeby nie nadużywać przedmiotów i nie tworzyć nieskończonej ich
ilości.
Umieszczanie bloków znajdziemy nawet w procedurze od wieży, którą udało Ci się ostatnio
stworzyć. Musimy tylko blok podmienić na powietrze, czyli AIR.
entityToSpawn.setPickupDelay((int) 10);
world.addEntity(entityToSpawn);
Mamy przygotowaną różdżkę oraz możemy ją stworzyć w naszym świecie. Możesz również
pobawić się jej ustawieniami!
Jako zadanie dodatkowe spróbuj dodać do nowej procedury warunek mówiący o tym, że
jeżeli postawimy naszą rudę na skale macierzystej i na złej wysokości to otrzymamy
węgiel - czy to w formie przedmiotu, czy to bloku węgla. Możesz także spróbować dodać
własną recepturę na inny, nowy przedmiot. W zadaniu tym może pomóc Ci plik z małym
podsumowaniem, który znajdziesz poniżej.