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

[Pytanie] API Silnika


Rekomendowane odpowiedzi

Opublikowano

Siem!

Mam pytanie dotyczące API silnik.

Wiecie lub nie, ale powstaje nowy

silnik pod serwery Minecraft'a.

Jeśli użyje do tworzenia pluginu

SpongeAPI(1) a wstawię plugin na

silnik craftbukkit, czyli od Bukkita

to, czy plugin będzie mi działał??

 

 

(1)

spongepowered.github.io/SpongeAPI/

 

 

4462514400953061278225.png

Opublikowano

oczywiście że nie, ale da się tak zrobić, tylko że to PRAWIE jak pisanie 2 pluginów.

Czyli tworzysz główne klasy, dla sponge i dla bukkita, i potem trzeba sobie opracować jakiś sprytny sposób na połączenie kodu. Nie można w kodzie od sponge, używać kodu z bukkita, ani odwrotnie, więc wszystko trzeba robić tak, by nie odwoływać się bezpośrednio do tych metod.

Np tworzysz sobie Interface:

public interface MyPlayer
{
  String getName();
  int getLevel();
}

itd... ale bardzo ważne by nie było tu żadnej metody która zwraca coś z bukkita/sponge, jak cos takiego jest, to też trzeba stworzyć do tego odpowiednie interface.

 

I potem tworzysz dwie klasy, jedną dla sponge, drugą dla bukkita, np taką dla bukkita:

public class MyBukkitPlayer implements MyPlayer
{
  private final Player player; // bukkitowy player
// + konstruktor
  @Override
  public String getName()
  {
    player.getName();
  }
  // tak samo z innymi metodami.
}

I wtedy możesz już takiego interface używać w jakimś wspólnym kodzie, dzięki czemu nie musisz pisać wszystkiego 2x, tylko część :P

Oczywiście musisz mieć też metodę do pobrania tego, ja polecam zrobić interface "PluginCore" z metodą np: MyPlayer getPlayer(String name) (i innymi potrzebnymi)

I zaimplementować te interface w glównych klasach pluginu, czyli w głównej klasie od bukkita, i w głównej klasie od sponge.

oraz zrobić gdzieś, może być w innej klasie, np "Core", zmienną, statyczną PluginCore inst.

I w onEnable pluginu bukkita, ustawiać ją na "this" czyli na instancje pluginu bukkita, i tak samo w sponge, na instancję sponge.

 

Dzięki temu w dowolnym miejscu kodu, możemy już sobie zrobić:

final int level = Core.inst.getPlayer("Notch").getLevel();

i ten kod działa już wtedy jednocześnie na bukkicie, i jednocześnie na sponge.

Warto tak pisać, zamiast np tworzeniu 2 bardzo podobnym kodów -> np eventów, to się bawić takimi interfejsami, i mieć jeden kod -> mniejsza szansa na bugi, bo tak to zmienisz coś w jednym, w drugim zapomnisz lub zmienisz inaczej i dupa. + mniej roboty.

 

Mam nadzieje że coś zrozumiałeś, trudno to sensownie objaśnić.

No i trzeba dość dobrze ogarniać javę :P

1438614356923701010629.png

 

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...