Skocz do zawartości
MaRsOnIx

TRADEIQ - Bezpieczny i szybki handel z graczami.

Rekomendowane odpowiedzi

Użytkownik


 23574472_926878270846913_1460024662_n.pn

informacje.png

TradeIQ to wtyczka, która wprowadza do naszej gry bezpieczną wymianę.
Od teraz już nikt nie oszuka Cię w trakcie wymiany za Twoje drogocenne przedmioty.

dzialanie.png
Wtyczka dodaje nam nowe okno poprzez trzymanie klawisza "Shift" i interakcję prawego klawiszu myszy.
Okno pojawia się natomiast po tym jak gracz na którego została wykonana interakcja również kliknie na tego gracza, który wykonał wcześniej interakcje.
Po kliknięciu w dowolny przedmiot w naszym ekwipunku w trakcie włączonego okna, zostanie on natychmiastowo przeniesiony do tego okna.
Wygląd okna oraz wielkość, jak i czas na akceptacje i inne tego typu właściwości zależą tylko i wyłącznie od konfiguracji, która tworzy się w folderze "plugins", po uruchomieniu serwera.


trade.png

Konfiguracja:
 

# 
# +---------------------------------------------------------------------+ #
# |                       Trade IQ by MaRsOnIx                          | #
# +---------------------------------------------------------------------+ #
prefix: '&b[&7TradeIQ&b] ' # Wiadomość, która będzie się pojawiać zawsze przed każdą wiadomością wtyczki, jeżeli chcesz usunąć to zostaw puste. 
size: 4 # Rozmiar okna [ 1 - 6 ], każda liczba o jeden większa od poprzedniej to 9 dodatkowych slotów.
frameId: 65 # Identyfikator przedmiotu, który ma oddzielać lewą stronę od prawej.
frameLore: '&2Ty||&a<==========||&2<target>||&a==========>' # Opis przedmiotu wyżej.
timeExpiryRequest: 10 # Czas po jakim ma mijać zaproszenie do handlu.
timeEndTrade: 5 # Czas po jakim handel ma zakończyć się powodzeniem, chodzi o licznik, który jest w celach bezpieczeństwa po tym jak dwie strony dokonają akceptacji.
acceptItem: '&aAkceptuj' # Nazwa przedmiotu do akceptacji.
acceptedItem: '&aZaakceptowano' # Nazwa przedmiotu po kliknięciu w akceptacje.
guiName: '&lOkno Handlowania' # Nazwa okna.
playerNotOffline: '&cGracz <target> nie jest na serwerze.' # Wiadomość, która się pojawia, jeśli gracz nie jest na serwerze.
alreadyTrading: '&cGracz aktualnie handluje z inna osoba.' # Wiadomość, która się pojawia w trakcie, gdy gracz już handluje z innym graczen.
dontWantTrade: '&cGracz nie chce z Toba handlowac.' # Wiadomość, która się pojawia jeśli gracz na którego została dokonana interacja, kliknął już na innego gracza i tym samym chce z innym graczem handlować.
requestAlreadySent: '&cProsba o handel zostala juz wyslana do jakiegos gracza, sprobuj za chwile.' # Wiadomość, która się pojawia, gdy gracz już wysłał do kogoś zaproszenie o handel i musi czekać na ackeptacje.
requestSent: '&aProsba o handel z graczem <target> zostala wyslana.' # Wiadomość, która się pojawia, jeśli gracz wyśle zaproszenie poprzez kliknięcie.
requestReceived: '&aGracz <player> chce z Toba handlowac.' # Wiadmoność, kóra się pojawia, gdy ktoś klinął na gracza i chce handel z nim.
checkUpdate: true # Sprawdza nowe aktualizacje i tym samym informuje o potrzebie pobrania nowej wersji.


Plugin możemy przetestować na poniższych serwerach:
-
[ciach]
[ciach]
- ?
- ?
- ?

Komendy.png
Tymczasowo wtyczka nie posiada komend.
uprawnienia.png 

Tymczasowo wtyczka nie posiada uprawnień.
23634664_927731320761608_1481580602_n.png
Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!
Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!

23634974_927727724095301_120530176_n.png

Wersja 1.0:
- Wydanie podstawowego systemu handlu
Wersja 1.5:
- Dodanie informatora o nowej wersji wtyczki
- Dodanie konfiguracji wtyczki

Edytowane przez Ixidi
reklamy
LjayPL789

Link do pobrania pluginu nie działa, w związku z tym temat przenoszę do archiwum.

Notatka dodana przez LjayPL789

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Użytkownik
  public NewUpdate(String version)
  {
    URL address = null;
    try
    {
      address = new URL("http://pvp.iq.pl/TradeIQ/version.txt");
    }
    catch (MalformedURLException e1)
    {
      e1.printStackTrace();
    }
    InputStreamReader pageInput = null;
    try
    {
      pageInput = new InputStreamReader(address.openStream());
    }
    catch (IOException e1)
    {
      e1.printStackTrace();
    }
    BufferedReader source = new BufferedReader(pageInput);
    try
    {
      this.received = source.readLine();
      if (Double.valueOf(this.received).doubleValue() > Double.valueOf(version).doubleValue())
      {
        this.require = true;
        TradeIQ.getInstance().getLog().warning(ChatColor.stripColor(Config.prefix) + "There is a newer version available: " + getReceived() + ", " + 
          "you're on: " + TradeIQ.getInstance().getDescription().getVersion());
        TradeIQ.getInstance().getLog().warning(ChatColor.stripColor(Config.prefix) + "You can download the newest version from: http://pvp.iq.pl/TradeIQ/latest.jar");
      }
    }
    catch (IOException e) {}
  }

można zrobić lepiej,

 

private static TradeIQ instance;

  public void onEnable()
  {
    this.config = getConfig();
    instance = this;

czemu wy tak robicie instancje

 

 

Mogłeś zrobić jakąś lepszą konfiguracje, użyć do configów jsona, itd.

 

 

  @EventHandler
  public void playerInteract(PlayerInteractEntityEvent e)
  {
    if ((e.getRightClicked() instanceof Player))
    {
      Player player = e.getPlayer();
      Player playerTwo = (Player)e.getRightClicked();
      if (!player.isSneaking()) {
        return;
      }
      Request.trade(player, playerTwo);
    }
  }

możesz dodać do configu coś typu boolean czy ma sprawdzać czy gracz jest na spawnie, i granice spawna, tak aby tylko na spawnie możnaby używać wymian

 

znajdzie sie jeszcze kilka rzeczy, ale to szczegóły,

no i w sumie to tyle ode mnie

getPlugin
public static <T extends JavaPlugin> T getPlugin(Class<T> clazz)
This method provides fast access to the plugin that has provided the given plugin class, which is usually the plugin that implemented it.
An exception to this would be if plugin's jar that contained the class does not extend the class, where the intended plugin would have resided in a different jar / classloader.

Type Parameters:
T - a class that extends JavaPlugin
Parameters:
clazz - the class desired
Returns:
the plugin that provides and implements said class
Throws:
IllegalArgumentException - if clazz is null
IllegalArgumentException - if clazz does not extend JavaPlugin
IllegalStateException - if clazz was not provided by a plugin, for example, if called with JavaPlugin.getPlugin(JavaPlugin.class)
IllegalStateException - if called from the static initializer for given JavaPlugin
ClassCastException - if plugin that provided the class does not extend the class

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Użytkownik

@yooniks jeżeli chodzi o sprawdzanie aktualizacji, domyślam się, że można byłoby to zrobić lepiej, zrobiłem to w taki sposób, bo nigdy żadnego swojego plugin'u nie publikowałem do tej pory i tego typu system, nie był mi jeszcze potrzebny.
Odnośnie instancji to wydaje mi się, że tego typu accessor nie jest zły i nie rozumiem w jaki inny sposób miałbym to zrobić skoro (moim zdaniem) ma to obiektową podstawę i mało tego dużo znanych wtyczek używa tego typu sposobu.
Rozumiem, że równie dobrze mógłbym usunąć statyczność i samą instancje głównej klasy mógłbym przekazywać bezpośrednio poprzez metodę domyślną w innym obiekcie, ale czy to ma sens?
W kwestii konfiguracji, to myślałem o tym, jednak na razie chciałem zobaczyć jak plugin zostanie przyjęty przez użytkowników, a dopiero potem chciałem się tym zająć.
Dziękuję za pomysł związany ze sprawdzaniem gracza na spawnie, w przyszłej aktualizacji postaram się zaimplementować tą funkcję :)

 

Edytowane przez MaRsOnIx

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Losowy awatar
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×