Skocz do zawartości
  • 0

Vanish


innos

Pytanie

hej, zaczynam przygode z pisaniem pluginow w java po przejsciu ze skript. Aktualnie próbuje napisać plugin na vanish. Chce go dosyc dobrze rozbudowac poniewaz zwykle znikanie juz zrobilem. Chce aby gracz dostawal nie tylko niewidzialnosc ale tez fly czyli (p.setAllowFlight(true)) który dodalem ale tez: 1. aby byl niezniszczalny 2. nie mogl bic innych graczy 3. nie widzialy go moby (o ile to mozliwe) 4. nie mogl podnosic itemow5. nie mogl wyrzucac itemow 6. mogl otwierac skrzynki bez dzwieku i efektu wizualnego 7. nie mogl niszczyc blokow.

Troche tego jest... (nie moge tego znalesc w spisie klas bukita)

Edytowane przez innos
Odnośnik do komentarza
Udostępnij na innych stronach

15 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

ale to z czym dokładnie masz problem? Ogólnie pomyśl o gamemode spectatora, ułatwi sprawę.

1. Masz metodę .setInvulnerable lub możesz to zrobić tak samo jak 2. - lub spectator i samo dziala

2.Przecież jest Event EntityDamageEvent i EntityDamageByEntityEvent możesz tam sobie anulować wszelkie obrażenia, zadane lub otrzymane - lub spectator i samo dziala

3. średnio na jeża idzie to w pełni zrobic bez zabaw z NMS itd, ale możesz zmienić mu gamemode na spectatora - wtedy też rozwiążesz masę innych problemów jak to o zadawaniu obrażeń 
A tak to możesz dać collidable na false -  i samo dziala

4. no jest event ItemPickupEvent - lub spectator i samo dziala

5. Nie ma punkty piątego.

6. Tutaj musisz ręcznie wykryć kliknięcie na skrzynkę Eventem PlayerInteractEvent i jeśli to otwieranie skrzynki to anulować i otworzyć własne inventory z taką samą zawartością co skrzynka  - lub spectator i samo dziala

7. BlockBreakEvent i anulujesz co chcesz - lub spectator i samo dziala

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
5 minut temu, GotoFinal napisał:

3. średnio na jeża idzie to w pełni zrobic bez zabaw z NMS itd, ale możesz zmienić mu gamemode na spectatora - wtedy też rozwiążesz masę innych problemów jak to o zadawaniu obrażeń

EntityTargetEvent, ale to nie wpłynie na to, że moby nie będą się wokół gracza na vanishu nie spawnić.

 

6 minut temu, GotoFinal napisał:

A tak to możesz dać collidable na false -  i samo dziala

No i kolizji z graczem na vanishu też się nie da zrobić, bo obydwa entity muszą mieć wyłączoną kolizję, aby do niej w ogóle nie dochodziło.

 

7 minut temu, GotoFinal napisał:

5. Nie ma punkty piątego.

A PlayerDropItemEvent?

 

Do tego musisz usuwać aplikację rzucanych potek dla gracza na vanishu ze PotionSplashEvent.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
2 minuty temu, TheMolkaPL napisał:

EntityTargetEvent, ale to nie wpłynie na to, że moby nie będą się wokół gracza na vanishu nie spawnić.

 

No i kolizji z graczem na vanishu też się nie da zrobić, bo obydwa entity muszą mieć wyłączoną kolizję, aby do niej w ogóle nie dochodziło.

 

A PlayerDropItemEvent?

 

Do tego musisz usuwać aplikację rzucanych potek dla gracza na vanishu ze PotionSplashEvent.

Ah, co do pkt piątego to chyba dodał to podczas edytowania postu, bo wcześniej zwyczajnie nie widziałem tam żadnego punktu piątego :D było 4 a potem 6 ;/

a kolizje powinien spectator jako tako ogarnąć. A EntityTargetEvent to no, średnio to działa, moby i tak będą go widzieć i np losowo zerkać i śledzić go wzrokiem - bo mają to w AI.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

                            p.EntityDamageEvent(false);
                            p.ItemPickupEvent(false);
                            p.PlayerDropItemEvent(false);
                            p.BlockBreakEvent(false);

nie wiem jak to dodac temu graczowi ;( ja na siłe chciałem tak

wszyscy gracze z vanishem są tu: "    private static List<Player> lista = new ArrayList<Player>();        "

(punkt 5 przez przypadek mi sie usunoł ale potem dodalem)

Edytowane przez innos
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
p.EntityDamageEvent(false);
p.ItemPickupEvent(false);
p.PlayerDropItemEvent(false);
p.BlockBreakEvent(false);

Jedyne co mnie ciekawi to w jaki sposób do tego doszedłeś xDDD

Musisz nasłuchiwać wszystkich eventów (najlepiej na priorytecie LOWEST, czyli pierwszym) i je anulować jeżeli gracz ma vanisha.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
1 minutę temu, TheMolkaPL napisał:

p.EntityDamageEvent(false);
p.ItemPickupEvent(false);
p.PlayerDropItemEvent(false);
p.BlockBreakEvent(false);

Jedyne co mnie ciekawi to w jaki sposób do tego doszedłeś xDDD

Musisz nasłuchiwać wszystkich eventów (najlepiej na priorytecie LOWEST, czyli pierwszym) i je anulować jeżeli gracz ma vanisha.

A jak to zrobic XD

Zebysmy sie dobrze zrozumieli... Ucze sie javy od 2 dni...

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

Bezpieczniej jest użyć metadane gracza do zapisu czy jest on na Vanishu. Chyba, że masz pewność, że z listy usuwani są gracze, którzy wychodzą z serwera. Nie zapisuj Player, a jedynie do niego jakiś odnośnik, na przykład UUID. Przejdź w końcu przynajmniej na Javę 7...

Odnośnik do komentarza
Udostępnij na innych stronach

Nieaktywny
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...