Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Plugin] Projekt Arcade - projekt pluginu na mini-gry


PabloTL

Rekomendowane odpowiedzi

Opublikowano

Siemanko :D

 

Robię sobie plugin na minigry Arcade. Był już taki, ale chce napisać go od nowa i zbudować w ogóle innych design, który pozwoli na jeszcze więcej funkcji.

 

 

Cały kod od początku powstaje jako open-source. Można go znaleźć na GitHubie - https://github.com/ShootGame/Arcade2.

Obecnie nie ma możliwości pobrania pluginu, ponieważ dopiero buduje jego strukturę.

 

Projekt Arcade - bo tak to nazwałem - ma się składać z pluginu na mini-gry, plikami serwerowymi i kilkoma przykładowymi mapami do właśnie tych gier.

 

Plugin chce napisać jak najbardziej abstrakcyjnie jak to możliwe, aby umożliwić łatwe dopisywanie nowych funkcji do pluginu. Chcę go oprzeć o moduły, które będą włączone i wyłączane w potrzebie do każdej z map. Cała logika pluginu będzie polegać na przenoszeniu się między mapami.

 

1. Ładowanie mapy oraz jej ustawień.

2. Włączanie modułów pluginu.

3. Przenoszenie graczy.

4. Startowanie gry.

5. Kończenie gry.

6. Wyłączanie modułów pluginu.

7. Patrz punkt 1.

 

Każdą mapę będzie można dobrowolnie konfigurować, niezależnie od innych map. Działanie pluginu będzie oparte właśnie o te konfigurację. Folder mapy (w którym znajduje się level.dat, oraz inne pliki mapy) należy umieścić w folderze repozytorium map. Taki folder powinien posiadać plik XML map.xml z jej konfiguracją.

 

Plugin poprzez kolejkowanie map będzie je ładował (najpierw kopiował do swojej lokalizacji światów) i uruchamiał według ustawień zawartych w konfiguracji.

 

Przykładowa konfiguracja wygląda tak - link.

 

Obecnie mam napisaną podstawową logikę pluginu, system tasków, zarządania modułami i mapami. Teraz to testuje i rozwijam moduły. Mam już napisany moduł na rozgrywanie meczy oraz tworzenie drużyn.

 

Piszcie propozycję do pluginu i pomysły na jego rozwój :D Mam w planach napisanie najpierw team-death matchy, potem Castle mode oraz Destroy the monument.

 

Pozdrawiam :D

 

UPDATY

 

 

 

 

 

Tak jak wyżej - dodałem kity. Ich przykładowa konfiguracja:

 

<kits>
    <kit id="essential-kit" inherit="creative-kit, custom-kit">
        <item slot="0" material="diamond sword" amount="1" />
        <item slot="1" material="diamond pickaxe" amount="1">
            <name>Your unbreakable Diamond pickaxe</name>
            <description>
                <line>Line 1</line>
                <line>Line 2</line>
            </description>
            <enchantments>
                <enchantment level="3">silk touch</enchantment>
            </enchantments>
            <unbreakable>true</unbreakable>
        </item>
        <item slot="2" material="stone" amount="64" />
        <item slot="3" material="stone" amount="64" />
        <potion ambient="true" amplifier="1" color="TODO" duration="oo" particles="true">fire resistance</potion>
    </kit>

    <kit id="creative-kit">
        <gamemode>creative</gamemode>
        <!-- Types: 'error', 'info', 'normal', 'success', 'tip' -->
        <message type="info">You are now in creative mode!</message>
    </kit>

    <kit id="custom-kit">
        <item material="ladder" amount="32" />
    </kit>
</kits>
https://github.com/ShootGame/Arcade2/blob/master/src/main/resources/map.xml

 

Kitów można tworzyć dowolną ilość, ale każde musi mieć swoje unikalne ID (ID musi być także unikalne dla każdego elementu w XML, ze względu na ich ideksowanie).

 

Kity są dziedziczne - to znaczy, że możemy stworzyć kit A, oraz kit B, gdzie kit B będzie dziedziczył po kicie A - to znaczy, że kit B będzie miał w sobie zawartość kitu B i A.

 

Kit zawiera kontent - może nim być item, tryb gry, wiadomość czy efekt potki (w przyszłości będzie ich oczywiście więcej). To znaczy, że kit nie musi się składać wyłącznie z przedmiotów, ale z pewnych funkcji, które wykonują się wraz z otrzymaniem właśnie tego kitu. Przykładowo wysłanie wiadomości, czy zmiana trybu gry.

 

Najbardziej rozbudowanym kontetem jest item. Można w nim ustawić nazwę itemu, opis (tzw. "lore"), dodać enchanty, ustawić unbreakable, ustawić slot. Obecnie pisze parsery do interpretacji MetaData, dzięki temu będzie można kolorować zbroję, pisać gotowe książki, dodawać fajerwerki, potki, etc.

 

Kity prezentują się obecnie tak:

 

- można parsować zawartość książek

- można dodawać enchanty na książki do enchantowania

- można dodawać sub-ID do itemów

- można kolorować zbroję

- można dodawać potiony

- można dodawać głowy graczy z podanych nicków

 

 

<kits>
    <kit id="essential-kit" inherit="creative-kit, custom-kit">
        <item slot="0" material="diamond sword" amount="1" />
        <item slot="1" material="diamond pickaxe" amount="1">
            <name>Your unbreakable Diamond pickaxe</name>
            <description>
                <line>Line 1</line>
                <line>Line 2</line>
            </description>
            <enchantments>
                <enchantment level="3">silk touch</enchantment>
            </enchantments>
            <unbreakable>true</unbreakable>
        </item>
        <item slot="2" material="stone" amount="64" />
        <item slot="3" material="stone" amount="64" />
        <potion-effect ambient="true" amplifier="1" color="TODO" duration="oo" particles="true">fire resistance</potion-effect>
    </kit>

    <kit id="creative-kit">
        <gamemode>creative</gamemode>
        <!-- Types: 'error', 'info', 'normal', 'success', 'tip' -->
        <message type="info">You are now in creative mode!</message>
    </kit>

    <kit id="custom-kit">
        <item material="ladder" amount="32" />
    </kit>

    <kit id="blue-leather-armor-kit" inherit="essential-kit">
        <item slot="103" material="wool:11" />
        <item slot="102" material="leather chestplate">
            <leather-color>blue</leather-color>
        </item>
        <item slot="101" material="chainmail leggings" />
        <item slot="100" material="leather-boots">
            <leather-color>blue</leather-color>
        </item>
    </kit>

    <kit id="red-leather-armor-kit" inherit="essential-kit">
        <item slot="103" material="wool:14" />
        <item slot="102" material="leather chestplate">
            <leather-color>red</leather-color>
        </item>
        <item slot="101" material="chainmail leggings" />
        <item slot="100" material="leather-boots">
            <leather-color>red</leather-color>
        </item>
    </kit>

    <kit id="meta-kit">
        <item slot="8" material="written book">
            <book author="TheMolkaPL" title="Custom book">
                <page>Page 1/3</page>
                <page>Page 2/3</page>
                <page>Page 3/3</page>
            </book>
        </item>
        <item slot="7" material="skull item">
            <skull owner="TheMolkaPL" />
        </item>
        <item slot="6" material="potion">
            <potion-effect ambient="true" amplifier="1" color="TODO" duration="oo" particles="true">fire resistance</potion-effect>
        </item>
    </kit>
</kits>
https://github.com/ShootGame/Arcade2/blob/master/src/main/resources/map.xml

 

Już napisałem, ale jeszcze nie jest scommitowane:

 

- możliwość latania (on/off, prędkość, czy może latać - on/off)

- możliwość zmiany poziomu głodu

- możliwość zmiany życia (serduszka)

- możliwość zmiany maksymalnej ilości życia (serduszka)

- możliwość zmiany knockback (mniejsze, większe niż normalnie)

- możliwość zmiany prędkości chodzenia

- możliwość dodawania/usuwania uprawnień

 

Essentialsowe kity wymiękają :D

 

Jeszcze raz kity:

 

- Dodałem typ kitu "latanie". Można włączyć/wyłączyć graczom latanie.

- Dodałem możliwość zmiany poziomu głodu.

- Dodałem możliwość zmiany poziomu zdrowia.

- Dodałem możliwość edycji odrzucania graczy (knockback) - to znaczy, że można zmienić tak, żeby graczy przyciągać, albo jeszcze mocniej odpychać.

- Dodałem możliwość zmiany maksymalnego możliwego zdrowia (ilość wyświetlanych serduszek).

- Jestem w trakcie dodawania/usuwania uprawnień. Do tego muszę zrobić jeszcze PermissionAttachment w graczu, do zarządzania uprawnieniami.

- Dodałem możliwość zmiany prędkości spadku głodu.

- Dodałem możliwość zmiany prędkości chodzenia.

- Dodałem możliwość ustawiania zbroi. Można było wcześniej po podaniu ID slota, gdzie item ma trafić, ale teraz są tagi <helmet><chestplate><leggings><boots>, ich zawartość parsuje się tak samo jak zwykły item.

- Dodałem możliwość czyszczenia ekwipunku (z możliwością czyszczenia taki slotów ze zbroją).

 

 

Regiony

 

Dodałem regiony!

Nie ma jednoznacznej definicji regionu, bo to interfejs. Na obecną chwilę regiony składają się z następujących implementacji: cylinder, global, negatywny, prostokąt, kula i unia (...a poza tym sądzę że powinna zostać zniszczona).

 

Może się to teraz wydawać w ogóle nie zrozumiałe, ale pozwólcie mi wyjaśnić. Każda implementacja to inny zupełnie typ regionu, to znaczy, że zawiera w sobie inne bloki. Przedstawię te implementacje poniżej:

 

Cylinder

Tworzymy region w kształcie cylindra. Tworzymy go na podstawie podania lokacji origin (po angielsku), albo origo, nie wiem jak po polsku się to nazywa. Po prostu to jest centralny punkt tej kuli. Podajemy lokalizację na podstawie X oraz Z. Y jest opcjonalne (jeżeli go nie podamy to cylinder stworzy się na całą wysokość mapy, od void aż do poziomu 256). Musimy podać wartość radius, opcjonalna jest też wartość `height`, czyli wysokość. Podajemy ją jeżeli podamy wartość Y.

 

220px-Cylinder_geometry.svg.png

 

Global

Tworzymy region po prostu na całą mapę. Tak samo jak w WorldGuard istnieje __global__; nic nowego, ot region na cały świat.

 

Negatywny

To jest region mechaniczny - to znaczy, że sam w sobie nie jest regionem, a jedynie adapterem do innego regionu. Ten region musi mieć w sobie już inny region. Powiedzmy, że tworzymy region cylinder na którym nie można niszczyć. Adaptujemy go do środka negatywnego i otrzymujemy zupełnie inny wynik. Na całej mapie nie można niszczyć, prócz środka cylindra.

 

Prostokąt

Region wszystkim znany - taki sam jaki tworzy nam plugin WorldGuard. Definiujemy dwie lokalizację, we wszystkich musimy podać wartości X oraz Z. Y ponownie jest opcjonalne - gdy go nie podamy to region stworzy się na całą wysokość mapy.

 

240px-Cuboid_simple.svg.png

 

Kula

Po prostu kula. Tutaj musimy podać origin centrum kuli. Musimy podać wszystkie parametry - X, Y oraz Z. Dodatkowo musimy także podać radius.

 

220px-Sphere_wireframe_10deg_6r.svg.png

 

Unia

Łączymy wiele regionów w jeden. Od teraz regiony mogą mieć zupełnie dowolne kształty poprzez łączenie ze sobą różnych figur geometrycznych i łączenie ich w jeden region. Regiony nie muszą na siebie nachodzić! Mogą znajdować się daleko od siebie.

 

GUID-D2B4AEE3-EEE0-4947-B96E-D53DB8EF19D

 

Lewo - dwa różne regiony, prawo - unia dwóch regionów.

Regiony

 

- Zmieniłem nazwę RectangleRegion na CuboidRegion - działanie się nie zmieniło.

- Dodałem region "PointRegion". Jest to region, który składa się z jednego punktu, lokalizacji. Planuje go używać w systemie spawnów.

 

Filtry

 

Dodałem filtry. Jest to system filtracji przesyłania danych dalej do pluginu poprzez ich konfigurację. Przykładowo możemy założyć region typu cuboid na dany obszar mapy. Możemy do takiego regionu dodać filtr który do wnętrza regionu będzie dodawać bloki o danego typu. Możemy mieć cuboid na spawn, ale tym cuboidem będzie w tym obszarze tylko blok dirtu. Wszystko inne nie będzie częścią regionu.

 

W konfiguracji możemy wykonywać pewne czynności - takie jak na przykład negowanie wyniku. Przykład:

<filters>
    <filter id="true-jezeli-material-to-stone">
        <material>
            <type>stone</type>
        </material>
    </filter>

    <filter id="false-jezeli-material-to-stone">
        <not>
            <material>
                <type>stone</type>
            </material>
        </not>
    </filter>
</filters>
Przykładowo następujące filtry będą miały ten sam wynik:

 

Z czasem będę rozbudowywał filtry - do filtracji na przykład czy gracz jest w drużynie, itd.

 

Projekt ma już ponad 200 klas i ponad 10k linijek kodu.

 

unknown.png

 

Q8eOMob.png

Opublikowano
    <teams>
            <team id="blue-team" color="blue" dye-color="blue" friendly-fire="true" max-players="20" min-players="3" slots="15">Blue Team</team>
            <team id="red-team" color="dark red" dye-color="red" friendly-fire="true" max-players="20" min-players="3" slots="15">Red Team</team>
        </teams>
    </modules>
</map>

O ile dobrze zrozumiałem ten kod to on ma za zadanie zmienic kolor uczestnika eventu ?

Opublikowano
    <teams>
            <team id="blue-team" color="blue" dye-color="blue" friendly-fire="true" max-players="20" min-players="3" slots="15">Blue Team</team>
            <team id="red-team" color="dark red" dye-color="red" friendly-fire="true" max-players="20" min-players="3" slots="15">Red Team</team>
        </teams>
    </modules>
</map>

O ile dobrze zrozumiałem ten kod to on ma za zadanie zmienic kolor uczestnika eventu ?

 

 

Ustawia w grze drużyny - w tym przypadku dwie - niebiescy i czerwoni o podanej konfiguracji.

Q8eOMob.png

Opublikowano

Ostatnie zmiany:

 

Bug fixes

https://github.com/ShootGame/Arcade2/commit/b62d66538048cae0c360c3990e9205fcacffd6f8

 

Kits

https://github.com/ShootGame/Arcade2/commit/b23aed1b17d77ca3cf6723773c838c4f99103b5b

 

Time and potion effects in kits

https://github.com/ShootGame/Arcade2/commit/17c343c7707b39ed09ba20fe84f3bf13e07d065c

 

Gamemodes in kits (OMG :D)

https://github.com/ShootGame/Arcade2/commit/b1c375edb0511d9a70a3b1200d01c0a4960efa2d

 

Inheriting kits, message content

https://github.com/ShootGame/Arcade2/commit/9e8a91dce9851d4b98e1194956ca2fbaf9b79124

 

Tak jak wyżej - dodałem kity. Ich przykładowa konfiguracja:

 

<kits>
    <kit id="essential-kit" inherit="creative-kit, custom-kit">
        <item slot="0" material="diamond sword" amount="1" />
        <item slot="1" material="diamond pickaxe" amount="1">
            <name>Your unbreakable Diamond pickaxe</name>
            <description>
                <line>Line 1</line>
                <line>Line 2</line>
            </description>
            <enchantments>
                <enchantment level="3">silk touch</enchantment>
            </enchantments>
            <unbreakable>true</unbreakable>
        </item>
        <item slot="2" material="stone" amount="64" />
        <item slot="3" material="stone" amount="64" />
        <potion ambient="true" amplifier="1" color="TODO" duration="oo" particles="true">fire resistance</potion>
    </kit>

    <kit id="creative-kit">
        <gamemode>creative</gamemode>
        <!-- Types: 'error', 'info', 'normal', 'success', 'tip' -->
        <message type="info">You are now in creative mode!</message>
    </kit>

    <kit id="custom-kit">
        <item material="ladder" amount="32" />
    </kit>
</kits>
https://github.com/ShootGame/Arcade2/blob/master/src/main/resources/map.xml

 

Kitów można tworzyć dowolną ilość, ale każde musi mieć swoje unikalne ID (ID musi być także unikalne dla każdego elementu w XML, ze względu na ich ideksowanie).

 

Kity są dziedziczne - to znaczy, że możemy stworzyć kit A, oraz kit B, gdzie kit B będzie dziedziczył po kicie A - to znaczy, że kit B będzie miał w sobie zawartość kitu B i A.

 

Kit zawiera kontent - może nim być item, tryb gry, wiadomość czy efekt potki (w przyszłości będzie ich oczywiście więcej). To znaczy, że kit nie musi się składać wyłącznie z przedmiotów, ale z pewnych funkcji, które wykonują się wraz z otrzymaniem właśnie tego kitu. Przykładowo wysłanie wiadomości, czy zmiana trybu gry.

 

Najbardziej rozbudowanym kontetem jest item. Można w nim ustawić nazwę itemu, opis (tzw. "lore"), dodać enchanty, ustawić unbreakable, ustawić slot. Obecnie pisze parsery do interpretacji MetaData, dzięki temu będzie można kolorować zbroję, pisać gotowe książki, dodawać fajerwerki, potki, etc.

Q8eOMob.png

Opublikowano

Ostatnie zmiany:

Parsing items meta data

https://github.com/ShootGame/Arcade2/commit/3f2f899320e27ff6b0a8d3ac4ede7e676586e804


Kity prezentują się obecnie tak:

- można parsować zawartość książek
- można dodawać enchanty na książki do enchantowania
- można dodawać sub-ID do itemów
- można kolorować zbroję
- można dodawać potiony
- można dodawać głowy graczy z podanych nicków



<kits>
    <kit id="essential-kit" inherit="creative-kit, custom-kit">
        <item slot="0" material="diamond sword" amount="1" />
        <item slot="1" material="diamond pickaxe" amount="1">
            <name>Your unbreakable Diamond pickaxe</name>
            <description>
                <line>Line 1</line>
                <line>Line 2</line>
            </description>
            <enchantments>
                <enchantment level="3">silk touch</enchantment>
            </enchantments>
            <unbreakable>true</unbreakable>
        </item>
        <item slot="2" material="stone" amount="64" />
        <item slot="3" material="stone" amount="64" />
        <potion-effect ambient="true" amplifier="1" color="TODO" duration="oo" particles="true">fire resistance</potion-effect>
    </kit>

    <kit id="creative-kit">
        <gamemode>creative</gamemode>
        <!-- Types: 'error', 'info', 'normal', 'success', 'tip' -->
        <message type="info">You are now in creative mode!</message>
    </kit>

    <kit id="custom-kit">
        <item material="ladder" amount="32" />
    </kit>

    <kit id="blue-leather-armor-kit" inherit="essential-kit">
        <item slot="103" material="wool:11" />
        <item slot="102" material="leather chestplate">
            <leather-color>blue</leather-color>
        </item>
        <item slot="101" material="chainmail leggings" />
        <item slot="100" material="leather-boots">
            <leather-color>blue</leather-color>
        </item>
    </kit>

    <kit id="red-leather-armor-kit" inherit="essential-kit">
        <item slot="103" material="wool:14" />
        <item slot="102" material="leather chestplate">
            <leather-color>red</leather-color>
        </item>
        <item slot="101" material="chainmail leggings" />
        <item slot="100" material="leather-boots">
            <leather-color>red</leather-color>
        </item>
    </kit>

    <kit id="meta-kit">
        <item slot="8" material="written book">
            <book author="TheMolkaPL" title="Custom book">
                <page>Page 1/3</page>
                <page>Page 2/3</page>
                <page>Page 3/3</page>
            </book>
        </item>
        <item slot="7" material="skull item">
            <skull owner="TheMolkaPL" />
        </item>
        <item slot="6" material="potion">
            <potion-effect ambient="true" amplifier="1" color="TODO" duration="oo" particles="true">fire resistance</potion-effect>
        </item>
    </kit>
</kits>

https://github.com/ShootGame/Arcade2/blob/master/src/main/resources/map.xml

Już napisałem, ale jeszcze nie jest scommitowane:

- możliwość latania (on/off, prędkość, czy może latać - on/off)
- możliwość zmiany poziomu głodu
- możliwość zmiany życia (serduszka)
- możliwość zmiany maksymalnej ilości życia (serduszka)
- możliwość zmiany knockback (mniejsze, większe niż normalnie)
- możliwość zmiany prędkości chodzenia
- możliwość dodawania/usuwania uprawnień

Essentialsowe kity wymiękają :D

Q8eOMob.png

Opublikowano

Polecam serdecznie, nie używałem ale gadałem z Pablo i podobno bardzo dobrze działa, widziałem screeny i wgl.

Polecam serdecznie.

 

Ogółem to można to przepisać do Skripta i fajnie to wszystko zoptymalizować, wydajnościowo mogłoby być lepiej, ale jak już zacząłeś w Javie to kontynuuj :D.

Opublikowano

Propozycja: Slime Parkour - w sensie robisz parkour na slimie albo innym mobie.

 

A tak po za tym sądze, że Unia Europejska powinna zostać zniszczona

...

Opublikowano

Ostatnie zmiany:

More kit content
https://github.com/ShootGame/Arcade2/commit/01e85875d7c478deb995808b97facfd7706e347a

.gitattributes
https://github.com/ShootGame/Arcade2/commit/aa2581de33dc092fa7a96e7ce027d0f66de6dbbe

Armor, clearning inventories
https://github.com/ShootGame/Arcade2/commit/ec27704bfcd7389a6bb36b1bfebc85cf219a351e

Regions
https://github.com/ShootGame/Arcade2/commit/0bad300409bd0a8f94795cbd9cd78c3551908cb3


Jeszcze raz kity:

- Dodałem typ kitu "latanie". Można włączyć/wyłączyć graczom latanie.
- Dodałem możliwość zmiany poziomu głodu.
- Dodałem możliwość zmiany poziomu zdrowia.
- Dodałem możliwość edycji odrzucania graczy (knockback) - to znaczy, że można zmienić tak, żeby graczy przyciągać, albo jeszcze mocniej odpychać.
- Dodałem możliwość zmiany maksymalnego możliwego zdrowia (ilość wyświetlanych serduszek).
- Jestem w trakcie dodawania/usuwania uprawnień. Do tego muszę zrobić jeszcze PermissionAttachment w graczu, do zarządzania uprawnieniami.
- Dodałem możliwość zmiany prędkości spadku głodu.
- Dodałem możliwość zmiany prędkości chodzenia.
- Dodałem możliwość ustawiania zbroi. Można było wcześniej po podaniu ID slota, gdzie item ma trafić, ale teraz są tagi <helmet><chestplate><leggings><boots>, ich zawartość parsuje się tak samo jak zwykły item.
- Dodałem możliwość czyszczenia ekwipunku (z możliwością czyszczenia taki slotów ze zbroją).
 
 
Regiony
 
Dodałem regiony!
Nie ma jednoznacznej definicji regionu, bo to interfejs. Na obecną chwilę regiony składają się z następujących implementacji: cylinder, global, negatywny, prostokąt, kula i unia (...a poza tym sądzę że powinna zostać zniszczona).
 
Może się to teraz wydawać w ogóle nie zrozumiałe, ale pozwólcie mi wyjaśnić. Każda implementacja to inny zupełnie typ regionu, to znaczy, że zawiera w sobie inne bloki. Przedstawię te implementacje poniżej:
 
Cylinder
Tworzymy region w kształcie cylindra. Tworzymy go na podstawie podania lokacji origin (po angielsku), albo origo, nie wiem jak po polsku się to nazywa. Po prostu to jest centralny punkt tej kuli. Podajemy lokalizację na podstawie X oraz Z. Y jest opcjonalne (jeżeli go nie podamy to cylinder stworzy się na całą wysokość mapy, od void aż do poziomu 256). Musimy podać wartość radius, opcjonalna jest też wartość `height`, czyli wysokość. Podajemy ją jeżeli podamy wartość Y.
 
220px-Cylinder_geometry.svg.png

 

Global

Tworzymy region po prostu na całą mapę. Tak samo jak w WorldGuard istnieje __global__; nic nowego, ot region na cały świat.

 

Negatywny

To jest region mechaniczny - to znaczy, że sam w sobie nie jest regionem, a jedynie adapterem do innego regionu. Ten region musi mieć w sobie już inny region. Powiedzmy, że tworzymy region cylinder na którym nie można niszczyć. Adaptujemy go do środka negatywnego i otrzymujemy zupełnie inny wynik. Na całej mapie nie można niszczyć, prócz środka cylindra.

 

Prostokąt

Region wszystkim znany - taki sam jaki tworzy nam plugin WorldGuard. Definiujemy dwie lokalizację, we wszystkich musimy podać wartości X oraz Z. Y ponownie jest opcjonalne - gdy go nie podamy to region stworzy się na całą wysokość mapy.

 

240px-Cuboid_simple.svg.png

 

Kula

Po prostu kula. Tutaj musimy podać origin centrum kuli. Musimy podać wszystkie parametry - X, Y oraz Z. Dodatkowo musimy także podać radius.

 

220px-Sphere_wireframe_10deg_6r.svg.png

 

Unia

Łączymy wiele regionów w jeden. Od teraz regiony mogą mieć zupełnie dowolne kształty poprzez łączenie ze sobą różnych figur geometrycznych i łączenie ich w jeden region. Regiony nie muszą na siebie nachodzić! Mogą znajdować się daleko od siebie.

 

GUID-D2B4AEE3-EEE0-4947-B96E-D53DB8EF19D

 

Lewo - dwa różne regiony, prawo - unia dwóch regionów.

Q8eOMob.png

Opublikowano

Ostatnie zmiany

Rename RectangleRegion to CuboidRegion, add PointRegion
https://github.com/ShootGame/Arcade2/commit/acceb9025463a6e31caad2ee5a010faaecb196f8

First think about filters
https://github.com/ShootGame/Arcade2/commit/1a8b347fd5275e5802d1f1455941f3c676995153

Regiony

- Zmieniłem nazwę RectangleRegion na CuboidRegion - działanie się nie zmieniło.
- Dodałem region "PointRegion". Jest to region, który składa się z jednego punktu, lokalizacji. Planuje go używać w systemie spawnów.

Filtry

Dodałem filtry. Jest to system filtracji przesyłania danych dalej do pluginu poprzez ich konfigurację. Przykładowo możemy założyć region typu cuboid na dany obszar mapy. Możemy do takiego regionu dodać filtr który do wnętrza regionu będzie dodawać bloki o danego typu. Możemy mieć cuboid na spawn, ale tym cuboidem będzie w tym obszarze tylko blok dirtu. Wszystko inne nie będzie częścią regionu.

W konfiguracji możemy wykonywać pewne czynności - takie jak na przykład negowanie wyniku. Przykład:

<filters>
    <filter id="true-jezeli-material-to-stone">
        <material>
            <type>stone</type>
        </material>
    </filter>

    <filter id="false-jezeli-material-to-stone">
        <not>
            <material>
                <type>stone</type>
            </material>
        </not>
    </filter>
</filters>

Przykładowo następujące filtry będą miały ten sam wynik:

Z czasem będę rozbudowywał filtry - do filtracji na przykład czy gracz jest w drużynie, itd.

Projekt ma już ponad 200 klas i ponad 10k linijek kodu.

unknown.png

Q8eOMob.png

Opublikowano

Nietypowy projekt, przyznam że pierwszy raz widzę tego typu Arcade. Czekam na pierwsze wydanie i chętnie przetestuje na serwerze.

 

A poza tym sadze że Minecraft 1.7 powinien być zniszczony - 1.11

hex.svg

 PLAYBASE - Nowoczesna lista serwerów gier

Opublikowano

Rzeczywiście, popierając zdanie poprzedników projekt dość nietypowy..

 

Chętnie przetestuję za chwile na serwerze, ale wydaje mi sie, że gdzieś już podobne widziałem..

Opublikowano

Pracuje nad zarządzaniem repozytoriami map. Repozytorium to specjalny folder w którym będą znajdować się foldery światów map. Każdy folder = świat = mapa.

 

Stworzyłem repozytorium na GitHub w którym będą się znajdować publiczne mapy do pluginu Arcade. Zapraszam także do dodawania swoich map w przyszłości poprzez pull request.

 

https://github.com/ShootGame/Public-Maps

Q8eOMob.png

Opublikowano

Czemu akurat w XML  robisz konfiguracje?

Uznałem, że XML jest w tym momencie najlepszy do moich potrzeb. Muszę mieć możliwość zapisu dużej ilości informacji w miarę wygodnie i ściśle. Elementy i atrybuty pasują do tego świetnie, natomiast do obsługi XMLa w Javie istnieje świetna biblioteka JDOM. YAML zajmuje więcej miejsca i często ma problemy z parsowaniem na przykład stringów.

 

jaki to programik do zliczania linijek kodu etc?

To plugin "Statistic" do Intellij IDEA. Na prawdę wygodne narzędzie.

Q8eOMob.png

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...