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

[DL][Autorski] AutoIn 2.0 - wykrywanie i automatycznie logowanie premium i znacznie więcej! zaawansowane API + Skript


Karolina_666

Rekomendowane odpowiedzi

Opublikowano

179301404139918424689.png

V 2.0-fix.3
Auto logowanie premium, premium API, Prawdziwe UUID na serwerach offline, lub odwrotnie! i znacznie więcej :>

 

 

394131404139918424689.png

Plugin wykrywa podczas logowania gracza, czy posiada on prawdziwe konto premium, zakupione na stronie Mojangu (a.k.a. Microsoft).

Dodatkowo naprawia UUID, czyli gracze z premium, mają swoje prawdziwe UUID zamiast fałszywego, wygenerowanego z nicku.

Gracze podszywający się pod graczy premium (używający czyjegoś nicku) zostaną z serwera wywaleni, chyba że są dodani do wyjątków.

Możliwość uruchomienia "whitelisty" która blokuje pirackim graczom dostęp do serwera, chyba że są na liście.

Plugin posiada możliwość automatycznego logwania/rejestrowania graczy posiadających premium, można do tego użyć takich pluginów jak: LogIt, AuthMe, xAuth, jeśli potrafi się programować w Javie można też dodać wsparcie do innych pluginów, ale zostanie to opisane niżej, w części dla developerów.

Plugin może też robić jako API, obsługa jego jest dziecinnie prosta i bezpieczna ;)

Dla mniej zaawansowanych użytkowników, 90% API jest dostępna z poziomu skryptów, (za pomocą pluginu Skript)

 

Dodatkowo posiada kilka drobnych "poprawek" (trzeba je włączyć/wyłączyć w konfiguracji), np:

Możliwość ujednolicenia UUID -> wszyscy gracze posiadają UUID generowane z nicku.

Poprawia działanie metody "Bukkit.getOfflinePlayer"

Poprawa dziwnego zachowania LogIt i TabListy na 1.8

 

Plugin nie wymaga żadnych innych pluginów do działania, jedynie można wgrać ProtocolLib dla większej optymalizacji.

Działa na CraftBukkicie i Spigocie od 1.7.2 do 1.7.10 (R1, R2, R3, R4) wliczając to najnowszego Spigota posiadającego wsparcie dla 1.8.

Oraz na Cauldronie (nowe MCPC+) pod 1.7.2 i 1.7.10

 

557161404139919424689.png

WAŻNE:

Jeżeli posiadamy spigota. należy w konfiguracji serwera (spigot.yml) zmienić opcje "late-bind" na true.

Inaczej gracze mogą dołączyć do serwera zanim mój plugin zostanie załadowany i zacznie działać.

 

 

Większość możliwości pluginu może zostać wyłączona (lub włączona), czyli można dostosować plugin do własnych potrzeb, domyślna konfiguracja wygląda tak:

Enabled: true
AutoLogin: true
ProtocolLib: true
FixedUUID: false
SkriptAPI: true
OnlineModeFix: true
MustRegister: true
ServersDown_Protect: true
ServersDown_IPCache: true
LogItForceFix: true
TryNumber: 3
PlayerLoginEvent: LOWEST
PlayerJoinEvent: LOWEST
PlayerQuitEvent: MONITOR
OfflineWhiteListEnabled: false
Exceptions: [BukkitSmerf]
EnabledLogin: [BukkitSmerf]
Lists:
  BukkitSmerf: WHITE_LISTED
  StupidNoob2Pro4u: BLACK_LISTED
Messages:
  AutoLogin: "&aYou have premium account!\n    &aPremium players don't must use login command! ;)"
  NoAutoLogin: ""
  ForceRegister: "&cPlease use /register command and remember your password!\n    &cYou don't must use it, but sometimes auth server can be broken, and then you must use /login command or wait to someone from Mojang will fix that servers!"
  ServersDownProtect: "&cWe can't check if you have real premium, please use your password!"
  ServersDownIPCached: "&aWe can't check if you have real premium, but last time you was premium, and have this same IP!\n    &aSo you don't must use /login command ;)"
  ServersDownProtectNewPlayer: "&4Mojang servers are down, we can't allow new players to join!\n&aPlease try again later !"
  PluginNotLoaded: "&4Server isn't enabled yet!\nTry again in 5 seconds!"

Enabled:

Jeśli opcja jest ustawiona na "false" to plugin przestanie sprawdzać czy gracze posiadają premium.

 

AutoLogin:

Jeśli opcja ustawiona jest na "true", wtedy plugin będzie automatycznie logował graczy z premium. (nie muszą używać komendy /login)

 

ProtocolLib:

Najlepiej nie ruszać, jest to opcja "awaryjna", jeśli posiadasz na serwerze plugin ProtocolLib i z jakiegoś powodu mój plugin nie chce z nim współpracować (sypie błędami w konsoli) to zmieniasz tę opcje na "false", wymuszając na moim pluginie używanie wbudowanego systemu.
Jeśli nie masz ProtocolLib na serwerze, to plugin i tak użyje wbudowanego systemu, ignorując tę opcje.

PS: Jak nie chce działać, to też zgłoś to do mnie, ta opcja jest tylko na okres czekania zanim to naprawię, gdy pojawi się jakiś problem!

 

FixedUUID:

Jeśli jest ustawione na "true" to wszyscy gracze mają takie UUID jakie by mieli jako pirackie konta, czyli generowane z nicku.
Może się przydać w celu zablokowana zmian nicku, które mają podobno zostać dodane, lub kiedy instalujemy ten plugin w trakcie trwania edycji -> nagła zmiana UUID wszystkich graczy premium może spowodować spore kłopoty. ;)

 

SkriptAPI:

Podobnie jak opcja "ProtocolLib", umożliwia wymuszenie nie rejestrowania API do pluginu Skript.
Domyślnie plugin po wykryciu że na serwerze jest zainstalowany plugin Skript, zarejestruje do niego moje skromne API, jeśli pluginu nie ma, to nic nie zrobi, ale jeśli ta opcja będzie ustawiona na "false", wtedy API nie zostanie zarejestrowane nawet po wykryciu pluginu Skript.

 

OnlineModeFix:

Sprawia że serwer przestawia się na "offline-mode", ale plugin dalej działa poprawnie.
Po co? Pluginy edytujące TAB-a, lub tworzące fałszywe tablice wyników (Scoreboard) mogą tworzyć duże ilości fałszywych graczy, w online-mode bukkit stara się tych graczy znaleźć w bazie Mojangu co ZNACZNIE spowalnia serwer, lub nawet potrafi go wyłączyć/zawiesić.

 

MustRegister:

Jeśli opcja jest na "true" wtedy KAŻDY musi się rejestrować używając zainstalowanego przez ciebie pluginu na autoryzacje.

Gracze premium dalej nie muszą się logować, ale rejestracja jest wymagana, przydatne w opcji opisanej niżej.

 

ServersDown_Protect:

Ponieważ jeden z ważniejszych linków na których opiera się ten system czasem lubi się zawiesić, to włączenie tej opcji sprawi że nawet gdy plugin nie otrzyma odpowiedzi, to zezwoli graczowi na zalogowanie się, jednak zostanie on oznaczony jako "error", czyli plugin nie wie czy posiada on konto premium. Taki gracz musi się zalogować, dlatego też do poprawnego działania tej komendy powinno ustawić się "MustRegister" na true. (By gracz premium też miał swoje hasło)
Gracze nie zarejestrowani na serwerze zostaną z niego wywaleni. (wiadomość można skonfigurować)

Warto dodać że UUID gracza premium zostanie przywrócone z pamięci/pliku ;)
Jeżeli opcja jest ustawiona na "false", taki gracz zostanie potraktowany jako premium, to znaczy że zostanie przeprowadzony na nim proces autoryzacji -> tylko gracze premium mogą wejść, o ile główne serwery Mojang działają.

 

ServersDown_IPCache:

Kiedy gracz premium dołączy do serwera jego IP oraz UUID zostają zapisane do pamięci, gdy przy następnym logowaniu, wysąpi jakiś problem i gracz zostanie oznaczony jako "error", ale jego IP się nie zmieniło, to zostanie automatycznie zalogowany jak każdy gracz premium..

 

LogItForceFix:

Wymusza wyłączenie w pluginie LogIt wszystkich funkcji dotyczących "Tab-a", bo niestety plugin sypie błędami na "1.8".

 

TryNumber:

Określa liczbę prób sprawdzenia poprawności nicku gracza jaką ma podjąć plugin, zanim uzna że serwery Mojang "nie chcą współpracować".
Powyżej 5 daje już chyba 100% szanse braku przypadkowych błędów.

(1 ~ 7%, 2 ~ 2%, 3 ~ 1%, 4 ~ prawie nic)

 

OfflineWhiteListEnabled:

Jeśli jest na "true" to pirackie konto musi być na white-liście by mogło dołączyć. (nie blokuje to graczy premium)

 

Exceptions:

Lista wyjątków, gracze z tej listy są zawsze traktowani jako piraci, nawet jeżeli posiadają nicki premium.

Czyli dodanie tutaj nicku "Notch", umożliwi dostanie się na te konto pomimo tego iż nie jest ono nasze, a jest kontem premium.

Taki gracz NIE zostanie automatycznie zalogowany.

 

EnabledLogin:

Gracze dodani do tej listy są pomijani przez system automatycznego logowania, czyli gracz premium dodany do tej listy i tak musi używać komendy /login.

Jednak przez plugin dalej jest on rozumiany jako gracz premium.

 

Lists:

Tutaj przechowywani są gracze z White i Black listy.

Graczy oznaczeni jako "BLACK_LISTED" nie mogą wejść na serwer (o ile nie mają premium), nawet jeśli "OfflineWhiteListEnabled" jest ustawione na "false".

 

PlayerLoginEvent,

PlayerJoinEvent,

PlayerQuitEvent:

Priorytety eventów, można się tym pobawić kiedy ma się jakieś problemy z pluginami na logowanie.
Np plugin dziwnie teleportuje, to możemy spr zmienić PlayerJoinEvent na LOW, potem na NORMAL, jak dalej jest źle to na 
HIGH, HIGHEST i w ostateczności na MONITOR

 

Messages:

Tutaj są wszelkie wiadomości, ustawienie wiadomości na "", sprawi że się nie wyświetli na czacie. (całkowicie, nie to że pusta linijka czy inne gie)

 

AutoLogin:

Kiedy gracz premium zostanie automatycznie zalogowany na serwer.

 

NoAutoLogin:

Kiedy piracki gracz wejdzie na serwer.

 

ForceRegister:

Kiedy gracz musi się zarejestrować.

 

ServersDownProtect:

Kiedy gracz wchodzi na serwer oznaczony jako "error" czyli plugin nie może stwierdzić czy ma premium.

 

ServersDownIPCached:

Kiedy gracz został automatycznie zalogowany dzięki zapamiętaniu adresu IP.

 

ServersDownProtectNewPlayer:

Wiadomość kick-a, gdy nowy gracz chce wejść na serwer ale wystąpił błąd podczas sprawdzania jego nicku.

 

PluginNotLoaded:
Wiadomość kick-a, gdy gracz chce dołączyć na serwer zanim plugin zostanie załadowany.

(jakiś lag, czy inny drobny bug, dla bezpieczeństwa)

 

212321404139919424689.png

Jak już zostało to napisane w opisie, plugin posiada wbudowane API które może być używane z poziomu skryptów od pluginu Skript.

 

Tutaj znajdziesz opis wszystkich dodatków:

 

 

 

=================================================
CONDITIONS
=================================================

 

Enabled login:

%offlineplayers/strings% (is|are|has) enabled login
%offlineplayers/strings% (is not|isn't|are not|aren't|hasn't|has not) enabled login

Sprawdza czy dany gracz/gracze są dodani do listy "EnabledLogin" w konfiguracji.

np:

if "Steve" has enabled login: 

Exception:

%offlineplayers/strings% (is|are|has) exception
%offlineplayers/strings% (is not|isn't|are not|aren't|hasn't|has not) exception 

Sprawdza czy dany gracz/gracze są dodani do list "Exceptions" w konfiguracji.

np:

if "Steve" is exception:  

Logged In:

%players% (is|are) logged in
%players% (is not|isn't|are not|aren't) logged in 

Sprawdza czy dany gracz jest zalogowany na serwerze. (chodzi o plugin od autoryzacji i np komendę /login)

np:

if player is logged in: 

PremiumStatus:

(%players% (PremiumStatus|Premium Status)|(PremiumStatus|Premium Status) of %players%) (is|are) premium
(%players% (PremiumStatus|Premium Status)|(PremiumStatus|Premium Status) of %players%) (is|are) exception
(%players% (PremiumStatus|Premium Status)|(PremiumStatus|Premium Status) of %players%) (is|are) error
(%players% (PremiumStatus|Premium Status)|(PremiumStatus|Premium Status) of %players%) (is|are) cracked
(%players% (PremiumStatus|Premium Status)|(PremiumStatus|Premium Status) of %players%) (is|are) cracked Exact
(%players% (PremiumStatus|Premium Status)|(PremiumStatus|Premium Status) of %players%) (is|are) Not Logged In
(%players% (PremiumStatus|Premium Status)|(PremiumStatus|Premium Status) of %players%) (is|are) Vaild
(%players% (PremiumStatus|Premium Status)|(PremiumStatus|Premium Status) of %players%) (is not|isn't|isnt|are not|aren't|arent) premium
(%players% (PremiumStatus|Premium Status)|(PremiumStatus|Premium Status) of %players%) (is not|isn't|isnt|are not|aren't|arent) exception
(%players% (PremiumStatus|Premium Status)|(PremiumStatus|Premium Status) of %players%) (is not|isn't|isnt|are not|aren't|arent) error
(%players% (PremiumStatus|Premium Status)|(PremiumStatus|Premium Status) of %players%) (is not|isn't|isnt|are not|aren't|arent) cracked
(%players% (PremiumStatus|Premium Status)|(PremiumStatus|Premium Status) of %players%) (is not|isn't|isnt|are not|aren't|arent) cracked Exact
(%players% (PremiumStatus|Premium Status)|(PremiumStatus|Premium Status) of %players%) (is not|isn't|isnt|are not|aren't|arent) Not Logged In
(%players% (PremiumStatus|Premium Status)|(PremiumStatus|Premium Status) of %players%) (is not|isn't|isnt|are not|aren't|arent) Vaild 

Sprawdza jaki jest status danego gracza:

 

premium:

Jest to gracz z kontem premium.

 

exception:

Gracz piracki, dodany do listy wyjątków w konfiguracji.

 

error:

Gracz podczas którego logowania wystąpił błąd z serwerem. Dotyczy opcji "ServerDownProtect".

 

cracked:

Dowolny gracz piracki, czyli każdy kto nie jest premium. (czyli "error" też jest "cracked" itd)

 

cracked Exact:

Gracz piracki, ale nie jest "error" ani "exception".

 

Not Logged In:

Gracz nie istnieje w pamięci pluginu, najczęściej oznacza to jakiś error, bug, lub dziwne użycie API.

 

vaild:

Odwrotność tego wyżej.

 

np:

if player premium status is premium:
if PremiumStatus of player is cracked: 

PremiumStatus/equals:

(%players% (PremiumStatus|Premium Status)|(PremiumStatus|Premium Status) of %players%) (is|are) equal(s|) to PREMIUM
(%players% (PremiumStatus|Premium Status)|(PremiumStatus|Premium Status) of %players%) (is|are) equal(s|) to CRACKED
(%players% (PremiumStatus|Premium Status)|(PremiumStatus|Premium Status) of %players%) (is|are) equal(s|) to EXCEPTION
(%players% (PremiumStatus|Premium Status)|(PremiumStatus|Premium Status) of %players%) (is|are) equal(s|) to ERROR
(%players% (PremiumStatus|Premium Status)|(PremiumStatus|Premium Status) of %players%) (is|are) equal(s|) to NOT_LOGGED_IN
(%players% (PremiumStatus|Premium Status)|(PremiumStatus|Premium Status) of %players%) (is not|isn't|isnt|are not|aren't|arent) equal(s|) to PREMIUM
(%players% (PremiumStatus|Premium Status)|(PremiumStatus|Premium Status) of %players%) (is not|isn't|isnt|are not|aren't|arent) equal(s|) to CRACKED
(%players% (PremiumStatus|Premium Status)|(PremiumStatus|Premium Status) of %players%) (is not|isn't|isnt|are not|aren't|arent) equal(s|) to EXCEPTION
(%players% (PremiumStatus|Premium Status)|(PremiumStatus|Premium Status) of %players%) (is not|isn't|isnt|are not|aren't|arent) equal(s|) to ERROR
(%players% (PremiumStatus|Premium Status)|(PremiumStatus|Premium Status) of %players%) (is not|isn't|isnt|are not|aren't|arent) equal(s|) to NOT_LOGGED_IN 

Podobne do poprzedniego, tym razem jednak zawsze sprawdzamy czy to jest dokładnie ten status. (PS: wielkość liter nie ma znaczenia, słowa są tu tylko wyróżnione dla ułatwienia.)

 

PREMIUM:

Gracz jest oznaczony jako premium.

 

CRACKED:

Gracz jest oznaczony jako pirat.

(zwraca fałsz jeśli gracz jest wyjątkiem (exception) lub błędem (error))

 

EXCEPTION:

Gracz jest oznaczony jako wyjątek.

 

ERROR:

Gracz jest oznaczony jako error.

 

NOT_LOGGED_IN:

Gracza nie ma w pamięci, lub został z jakiegoś powodu z niej usunięty.

 

np:

if player PremiumStatus is equal to PREMIUM:
Premium Status of player isn't equals to CRACKED: 

 Registered:

%offlineplayers/strings% (is|are) registered
%offlineplayers/strings% (is not|isn't|are not|aren't) registered

Sprawdza czy dani gracze są zarejestrowani na serwerze.

np:

if "Steve" is registered: 

WhiteList/enabled:

((is |)AutoIn whitelist (is |)enabled|((isn't|is not) |)AutoIn whitelist ((isn't|is not) |)disabled)
(((isn't|is not) |)AutoIn whitelist ((isn't|is not) |)enabled|(is |)AutoIn whitelist (is |)disabled) 

Sprawdza czy na serwerze jest uruchomiona whitelista dla graczy pirackich.

np:

if AutoIn whitelist is enabled: 

WhiteListStatus:

(%offlineplayers/strings% (AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status)|(AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status) of %offlineplayers/strings%) (is|are) Joinable
(%offlineplayers/strings% (AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status)|(AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status) of %offlineplayers/strings%) (is|are) (BlackListed|Black Listed)
(%offlineplayers/strings% (AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status)|(AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status) of %offlineplayers/strings%) (is|are) (WhiteListed|White Listed)
(%offlineplayers/strings% (AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status)|(AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status) of %offlineplayers/strings%) (is|are) Unknown
(%offlineplayers/strings% (AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status)|(AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status) of %offlineplayers/strings%) (is|are) Premium
(%offlineplayers/strings% (AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status)|(AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status) of %offlineplayers/strings%) (is not|isn't|isnt|are not|aren't|arent) Joinable
(%offlineplayers/strings% (AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status)|(AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status) of %offlineplayers/strings%) (is not|isn't|isnt|are not|aren't|arent) (BlackListed|Black Listed)
(%offlineplayers/strings% (AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status)|(AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status) of %offlineplayers/strings%) (is not|isn't|isnt|are not|aren't|arent) (WhiteListed|White Listed)
(%offlineplayers/strings% (AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status)|(AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status) of %offlineplayers/strings%) (is not|isn't|isnt|are not|aren't|arent) Unknown
(%offlineplayers/strings% (AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status)|(AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status) of %offlineplayers/strings%) (is not|isn't|isnt|are not|aren't|arent) Premium 

Sprawdza "stosunek" gracza a white/black listą:

 

Joinable:

(Czy?) Gracz może wejść na serwer, czyli nie jest na czarnej liście, oraz jest na białej, lub lista jest wyłączona.

 

BlackListed:

(Czy?) Gracz nie może wejść na serwer bo jest na czarnej liście.

 

WhiteListed:

(Czy?) Gracz jest na białej liście.

 

Unknown:

(Czy?) Gracza nie ma na żadnej z list.

 

Premium:

(Czy?) Gracz jest aktualnie na serwerze i jest graczem premium, czyli listy go nie obowiązują.

 

np:

if "Steve" AutoIn White List Status is Joinable:
if AutoIn White List Status of "Steve" isnt Joinable:

WhiteListStatus/equals:

(%offlineplayers/strings% (AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status)|(AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status) of %offlineplayers/strings%) (is|are) equal(s|) to BLACK_LISTED
(%offlineplayers/strings% (AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status)|(AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status) of %offlineplayers/strings%) (is|are) equal(s|) to WHITE_LISTED
(%offlineplayers/strings% (AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status)|(AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status) of %offlineplayers/strings%) (is|are) equal(s|) to UNKNOWN
(%offlineplayers/strings% (AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status)|(AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status) of %offlineplayers/strings%) (is|are) equal(s|) to PREMIUM
(%offlineplayers/strings% (AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status)|(AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status) of %offlineplayers/strings%) (is not|isn't|isnt|are not|aren't|arent) equal(s|) to BLACK_LISTED
(%offlineplayers/strings% (AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status)|(AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status) of %offlineplayers/strings%) (is not|isn't|isnt|are not|aren't|arent) equal(s|) to WHITE_LISTED
(%offlineplayers/strings% (AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status)|(AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status) of %offlineplayers/strings%) (is not|isn't|isnt|are not|aren't|arent) equal(s|) to UNKNOWN
(%offlineplayers/strings% (AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status)|(AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status) of %offlineplayers/strings%) (is not|isn't|isnt|are not|aren't|arent) equal(s|) to PREMIUM 

Sprawdza oznaczenie gracza w pamięci list:

 

BLACK_LISTED:

(Czy?) Gracz jest na czarnej liście.

 

WHITE_LISTED:

(Czy?) Gracz jest na białej liście.

 

UNKNOWN:

(Czy?) Gracza nie ma na żadnej liście.

 

PREMIUM:

(Czy?) Gracz jest oznaczony jako gracz premium, czyli listy go nie obowiązują.

 

np:

if "Steve" AutoIn White List Status is equals to BLACK_LISTED:
if AutoIn White List Status of "Steve" isn't equal to WHITE_LISTED: 

=================================================

EFFECTS

=================================================

 

Confgiuration:

save AutoIn (config(|uration) file|config(|uration))
reload AutoIn (config(|uration) file|config(|uration))

Pozwala zapisać lub przeładować konfiguracje pluginu.

np:

save AutoIn config file
reload AutoIn config 

EnabledLogin:

(add %offlineplayers/strings% to enabled(|s)(| )login(s|)(| list)|mark (the|) %offlineplayers/strings% as enabled(|s)(| )login(s|)(| list))
(remove %offlineplayers/strings% from enabled(|s)(| )login(s|)(| list)|unmark (the|) %offlineplayers/strings% as enabled(|s)(| )login(s|)(| list))
switch %offlineplayers/strings% in enabled(|s)(| )login(s|)(| list) 

Pozwala dodać/usunąć/przełączyć pozycje gracza w liście "EnabledLogin".

switch usuwa gracza jeśli jest na takiej liście, a dodaje jeśli go nie ma.

np:

add "Steve" to enabled logins list
remove "Steve" from EnabledLogins
switch "Steve" in EnabledLogin list 

Exceptions:

(add %offlineplayers/strings% to exception(|s)(| list)|mark (the|) %offlineplayers/strings% as exception(|s)(| list))
(remove %offlineplayers/strings% from exception(|s)(| list)|unmark (the|) %offlineplayers/strings% as exception(|s)(| list))
switch %offlineplayers/strings% in exception(|s)(| list) 

Pozwala dodać/usunąć/przełączyć pozycje gracza w liście "Exceptions".
switch usuwa gracza jeśli jest na takiej liście, a dodaje jeśli go nie ma.
np:

add "Steve" to exceptions list
remove "Steve" from exceptions
switch "Steve" in exceptions list  

ForceLogin:

(force login %players%|%players% force login) 

Powoduje zalogowanie się gracza. (tak jak by użył komendy /login, to samo co plugin robi z graczami premium)

np:

force login player
player force login 

Register:

(force register %offlineplayers/strings%|%offlineplayers/strings% force register) 

Powoduje zarejestrowanie się gracza. (hasło jest ustalone w module od danego pluginu i aktualnie nie ma możliwości by było używane inne)

np:

force register "Steve" 

Logout:

(force log( |)out %players%|%players% force log( |)out) 

Wymusza wylogowanie się gracza.

np:

force logout "Steve" 

WhiteList/remove:

remove ((AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status) of %offlineplayers/strings%|%offlineplayers/strings% (from |)(AutoInWhiteListStatus|AutoInWhiteList|AutoIn WhiteList|AutoIn White List)) 

Usuwa wybranego gracza z białej lub czarnej listy.

np:

remove "Steve" from AutoIn WhiteList 

PremiumStatus:

set ((PremiumStatus|Premium Status) of %players%|%players% (PremiumStatus|Premium Status)) to PREMIUM
set ((PremiumStatus|Premium Status) of %players%|%players% (PremiumStatus|Premium Status)) to CRACKED
set ((PremiumStatus|Premium Status) of %players%|%players% (PremiumStatus|Premium Status)) to EXCEPTION
set ((PremiumStatus|Premium Status) of %players%|%players% (PremiumStatus|Premium Status)) to ERROR
set ((PremiumStatus|Premium Status) of %players%|%players% (PremiumStatus|Premium Status)) to NOT_LOGGED_IN 

Ustawia status danego gracza na jedną z 5 możliwości.

 

PREMIUM:

Gracz posiadający konto premium.

 

CRACKED:

Gracz piracki.

 

EXCEPTION:

Gracz zalogowany dzięki dodaniu do wyjątków.

 

ERROR:

Gracz oznaczony jako błąd.

 

NOT_LOGGED_IN:

Gracz którego nie ma w pamięci. (ustawienie tego statusu usunie gracza z pamięci, jest to "domyślny" status)

 

np:

set premium status of player to CRACKED 

WhiteList/enable:

enable AutoIn whitelist
disable AutoIn whitelist
switch AutoIn whitelist 

Pozwala włączyć/wyłączyć/przełączyć działanie whitelisty.

Switch -> włącza jeśli była wyłączona i wyłącza jeśli była włączona.

np:

enable AutoIn whitelist
disable AutoIn whitelist
switch AutoIn whitelist 

WhiteList/set:

set ((AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status) of %offlineplayers/strings%|%offlineplayers/strings% ((AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status)) to BLACK_LISTED
set ((AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status) of %offlineplayers/strings%|%offlineplayers/strings% ((AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status)) to WHITE_LISTED
set ((AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status) of %offlineplayers/strings%|%offlineplayers/strings% ((AutoInWhiteListStatus|AutoIn WhiteList Status|AutoIn White List Status)) to UNKNOWN 

Pozwala ustawić relacje z whitelistą.

 

BLACK_LISTED:

Dodaje gracza do czarnej listy.

 

WHITE_LISTED:

Dodaje gracza do białej listy.

PS: gracz nie może być w obu listach, zostanie przeniesiony z jednej na drugą. (albo raczej zostanie zmieniony jego status, bo lista jest jedna)

 

UNKNOWN:

Usuwa z list.

 

np:

set AutoIn WhiteList status to UNKNOWN

=================================================
EVENTS
=================================================

 

PreForceLogin:

pre force login
pre forced login

Wywoływany przed zalogowaniem gracza i przed sprawdzeniem czy dany gracz powinien być zalogowany.

np:

on pre force login: 

ForceLogin:

force login
forced login 

Wywoływany podczas/przed zalogowaniem, już po sprawdzeniu wszystkich danych.

np:

on force login: 

 

 






701891404139919424689.png

Drobny opis API, bo raczej nie trzeba tutaj za dużo rozpisywać.

 

 

 

 

Wszystko co dotyczy API można znaleźć w pakiecie (i pod-pakietach):

com.gmail.bukkitsmerf.autoin.api 

a najważniejsze metody, i całe "serce" API w klasie:

com.gmail.bukkitsmerf.autoin.api.AutoInAPI 

Odczytywanie i ustawianie statusów graczy:

 

 

 

Najważniejszą metodą jest:

/* com.gmail.bukkitsmerf.autoin.api. */IPlayersStorage storage = AutoInAPI.getStorage(); 

Zwraca ona interface dający dostęp do wszystkich metod pozwalających sprawdzać czy dany gracz posiada konto premium, czy jest wyjątkiem, itp, itd.

    public PlayerStatus getStatus(final Player player);
    public PlayerStatus removeStatus(final String nick);
    public PlayerStatus setStatus(final Player player, final PlayerStatus status);
    public PlayerStatus setStatus(final String nick, final PlayerStatus status);
    public WhiteListStatus getWhiteListStatus(final String nick);
    public WhiteListStatus removeWhiteListStatus(final String nick);
    public WhiteListStatus setWhiteListStatus(final String nick, final WhiteListStatus status);
    public boolean hasEnabledLogin(final String nick);
    public boolean addEnabledLogin(final String nick);
    public boolean removeEnabledLogin(final String nick);
    public boolean isException(final String nick);
    public boolean addException(final String nick);
    public boolean removeException(final String nick);

PS: żadna z tych metod NIGDY nie ma prawa zwrócić null-a

 

Możemy więc pobrać status gracza używając pierwszej metody, czym on jednak jest?

Jest to bardzo proste enum, co jest chyba tutaj najwygodniejszym rozwiązaniem.

 

Kod źródłowy PlayerStatus:

 

 

public enum PlayerStatus
{
    PREMIUM, // gracz z poprawnym kontem premium.
    CRACKED, // zwykły gracz bez konta premium.
    EXCEPTION, // gracz dodany do listy wyjątków.
    ERROR, // podczas logowania tego gracza wystąpił problem z serwerami Mojang.
    NOT_LOGGED_IN; // Zwracane głównie tylko w przypadku błędu -> zamiast nulla. Oznacza że danego gracza nie ma na serwerze.

    public boolean isPremium()
    {
        return this == PREMIUM;
    }

    public boolean isException()
    {
        return this == EXCEPTION;
    }

    public boolean isError()
    {
        return this == ERROR;
    }

    public boolean isCracked()
    {
        return ! this.isPremium();
    }

    public boolean isCrackedExact()
    {
        return this == CRACKED;
    }

    public boolean isNotLoggedIn()
    {
        return this == NOT_LOGGED_IN;
    }

    public boolean isVaild()
    {
        return ! this.isNotLoggedIn();
    }
}

 

 

Najprościej będzie to pokazać na przykładzie, komenda dająca ciastka, której mogą użyć tylko gracze premium:

    @Override
    public boolean onCommand(final CommandSender sender, final Command cmd, final String alias, final String[] args)
    {
        if (!(sender instanceof Player))
        {
            sender.sendMessage("Niestety nie jesteś graczem, nie możesz dostać ciastek.");
            return true;
        }
        Player player = (Player) sender;
        PlayerStatus status = AutoInAPI.getStorage().getStatus(player);
        if (status.isCracked())
        {
            sender.sendMessage("Niestety, ale tej komendy mogą używać tylko gracze premium :(");
            return true;
        }
        player.getInventory().addItem(new ItemStack(Material.COOKIE, 16));
        sender.sendMessage("Twoje ciastka!");
        return true;
    }

Na podobnej zasadzie działa WhiteListStatus

Kod źródłowy:

 

 

public enum WhiteListStatus
{
    BLACK_LISTED, // Gracz jest na czarnej liście.
    WHITE_LISTED, // Gracz jest na białej liście.
    UNKNOWN, // Gracza nie ma na żadnej liście.
    PREMIUM; // Gracz jest online i jest graczem premium, więc listy go nie dotyczą.

    public boolean isBlackListed()
    {
        return this == BLACK_LISTED;
    }

    public boolean isWhiteListed()
    {
        return this == WHITE_LISTED;
    }

    public boolean isUnknown()
    {
        return this == UNKNOWN;
    }

    public boolean isPremium()
    {
        return this == PREMIUM;
    }

    public boolean canJoin() // sprawdza aktualna konfiguracja pluginu zezwala na dołączenie z takim statusem.
    {
        return this.isPremium() || (! this.isBlackListed() && (! AutoInAPI.getOptions().isWhiteListEnabled() || this.isWhiteListed()));
    }
} 

 


 

Po zmianie statusu whitelisty, lub dodaniu/usunięciu wyjątków czy wymuszonych logowań, należy zapisać plik konfiguracyjny, ale o tym niżej.

 


 

 

Wpływanie na konfiguracje pluginu:

 

 

 

Tutaj mamy kolejne interface:

/* com.gmail.bukkitsmerf.autoin.api. */Options options = AutoInAPI.getOptions(); 

Zawiera wszelkie metody pozwalająca na odczytanie lub zmienienie danych z konfiguracji.

Dostępne do zmiany są tylko te opcje które mogą na coś wpłynąć bez potrzeby resetowania serwera.

Oraz opcje zapisu/reloadu pliku.

    public void reloadConfig();
    public void saveConfig();

    public boolean isEnabled();
    public void setEnabled(boolean bool);

    public boolean isWhiteListEnabled();
    public void setWhiteListEnabled(boolean bool);

    public boolean isAutoLoginEnabled();
    public void setAutoLoginEnabled(boolean bool);

    public boolean isProtocolLibEnabled();

    public boolean isFixedUUIDEnabled();

    public boolean isSkriptAPIEnabled();

    public boolean isOnlineModeFixEnabled();

    public int getTryNumber();
    public void setTryNumber(int num);

    public boolean isMustRegisterEnabled();
    public void setMustRegisterEnabled(boolean bool);

    public boolean isServersDownProtectEnabled();
    public void setServersDownProtectEnabled(boolean bool);

    public boolean isServersDownIPCacheEnabled();
    public void setServersDownIPCacheEnabled(boolean bool);

    public String getAutoLoginMsg();
    public void setAutoLoginMsg(String str);
    public String getNoAutoLoginMsg();
    public void setNoAutoLoginMsg(String str);
    public String getForceRegisterMsg();
    public void setForceRegisterMsg(String str);
    public String getServersDownProtectMsg();
    public void setServersDownProtectMsg(String str);
    public String getServersDownIPCachedMsg();
    public void setServersDownIPCachedMsg(String str);
    public String getServersDownProtectNewPlayerMsg();
    public void setServersDownProtectNewPlayerMsg(String str);
    public String getPluginNotLoadedMsg();
    public void setPluginNotLoadedMsg(String str);

    // Poniższe metody zwracają wiadomości z już poprawionym kolorowaniem itd.
    public String getAutoLoginFixedMsg();
    public String getNoAutoLoginFixedMsg();
    public String getForceRegisterFixedMsg();
    public String getServersDownProtectFixedMsg();
    public String getServersDownIPCachedFixedMsg();
    public String getServersDownProtectNewPlayerFixedMsg();
    public String getPluginNotLoadedFixedMsg(); 

 

 

Dodawanie wsparcia do innych pluginów od logowania:

 

Możliwe jest też dodawanie kolejnych pluginów od logowania, tak samo jak domyślnie dodane są LogIt, AuthMe i xAuth.

 

 

Należy zacząć od napisania klasy która musi implementować interfejs

com.gmail.bukkitsmerf.autoin.api.LoginPlugin<T>

owe <T> to tak zwane "generic types", nie będziemy zagłębiać się co to jest (o ile nie wiecie), ale w miejsce "T" mamy podać nazwę głównej klasy pluginu do którego dodajemy support np "AuthMe"

 

Czyli tworzymy taką klasę:

import com.gmail.bukkitsmerf.autoin.api.LoginPlugin;

public class MyAuthMeSupporter implements LoginPlugin<AuthMe>
{

} 

Potem musimy dodać wymagane metody z tego interface, czyli:

public interface LoginPlugin<T extends Plugin>
{
    public abstract void forceLogin(Player player); // metoda która zmusić plugin do zalogowania gracza
    public abstract void forceRegister(String nick); // metoda która ma zarejestrować gracza.
    public abstract void forceLogout(Player player); // metoda która ma wylogować gracza.
    public abstract boolean needRegisterToLogin(); // metoda która ma zwracać "true" jeśli do wykonania metody "forceLogin" gracz musi być zarejestrowany. (LogIt i xAuth nie ma problemów, ale AuthMe już wymaga rejestracji lub większej zabawy z kodem)
    public abstract boolean isLoggedIn(Player player); // Metoda ma sprawdzać czy dany gracz jest zalogowany.
    public abstract boolean isRegistered(String nick); // Metoda ma sprawdzać czy dany gracz jest zarejestrowany.
    public abstract T getPlugin(); // Metoda ma zwracać główną klasę pluginu, zamiast T dajemy to co podaliśmy w miejscu T gdy implementowaliśmy interface.
} 

Czyli nasza klasa wygląda tak:

public class MyAuthMeSupporter implements LoginPlugin<AuthMe>
{

    @Override
    public void forceLogin(final Player player)
    {
        
    }

    @Override
    public void forceRegister(final String nick)
    {
        
    }

    @Override
    public void forceLogout(final Player player)
    {
        
    }

    @Override
    public boolean needRegisterToLogin()
    {
        return true; // w przypadku AuthMe tak jest łatwiej 
    }

    @Override
    public boolean isLoggedIn(final Player player)
    {
        
    }

    @Override
    public boolean isRegistered(final String nick)
    {
        
    }

    @Override
    public AuthMe getPlugin()
    {
        
    }
} 

Teraz musimy uzupełnić te metody tak by robiły to co powinny, klasa od AuthMe powinna wyglądać mniej-więcej tak:

public class MyAuthMeSupporter implements LoginPlugin<AuthMe>
{

    @Override
    public void forceLogin(final Player player)
    {
        this.checkLimbo(player);
        API.forceLogin(player);
    }

    @Override
    public void forceRegister(final String nick)
    {
        API.registerPlayer(nick, RandomUtils.randomString(16));
    }

    @Override
    public void forceLogout(final Player player)
    {
        this.checkLimbo(player);
    }

    @Override
    public boolean needRegisterToLogin()
    {
        return true;
    }

    @Override
    public boolean isLoggedIn(final Player player)
    {
        return API.isAuthenticated(player);
    }

    @Override
    public boolean isRegistered(final String nick)
    {
        return API.isRegistered(nick);
    }

    @Override
    public AuthMe getPlugin()
    {
        return API.hookAuthMe();
    }

    private void checkLimbo(final Player player)
    {
        final LimboCache lc = LimboCache.getInstance();
        if (! lc.hasLimboPlayer(player.getName()))
        {
            lc.addLimboPlayer(player);
        }
    }
} 

WAŻNE: Klasa ta, nie może zawierać żadnego konstruktora z argumentami.

 

Potem musimy taką klasę zarejestrować, robimy to jedną prostą metodą:

AutoInAPI.registerLoginPlugin("AuthMe", MyAuthMeSupporter.class); 

Pierwszy argument MUSI być poprawną nazwą pluginu na logowanie którego wsparcie dodajemy.

Rejestrując w ten sposób, nie musimy się nawet upewniać czy dany plugin istnieje na serwerze, AutoIn nie użyje tej klasy jeśli nie ma wymaganego pluginu ;)

 

PS: Można nadpisywać istniejące klasy.

 

 

Wbudowane eventy:

 

​Plugin posiada też kilka wbudowanych eventów, używa się ich identycznie jak tych z bukkita.

W spoilerach zawarty jest kod źródłowy danych eventów.

 

 

 

AuthPluginLookupEvent:

Wywoływany podczas szukania pluginu na logowanie, można tutaj sprawdzić jaki plugin został wybrany, lub nawet go zmienić.

 

 

public class AuthPluginLookupEvent extends Event
{
    private static final HandlerList handlers = new HandlerList();
    private LoginPlugin<?> loginPlugin;

    public AuthPluginLookupEvent(final LoginPlugin<?> loginPlugin)
    {
        this.loginPlugin = loginPlugin;
    }

    public LoginPlugin<?> getLoginPlugin()
    {
        return this.loginPlugin;
    }

    public void setLoginPlugin(final LoginPlugin<?> loginPlugin)
    {
        this.loginPlugin = loginPlugin;
    }

    @Override
    public HandlerList getHandlers()
    {
        return handlers;
    }

    public static HandlerList getHandlerList()
    {
        return handlers;
    }

    @Override
    public String toString()
    {
        return "AuthPluginLookupEvent{" +
                       "loginPlugin=" + this.loginPlugin +
                       '}';
    }
} 

 

 

 

 

MojangServerLostEvent:

Wywoływane kiedy próba połączenia z jednym z linków mojangu zwróci error, np 502.

Zawiera nick gracza, instancje erroru (Exception), oraz status gracza.

 

 

public class MojangServerLostEvent extends Event
{
    private static final HandlerList handlers = new HandlerList();

    private final String       nickname;
    private final Exception    exception;
    private       PlayerStatus status;

    public MojangServerLostEvent(final String nickname, final Exception exception, final PlayerStatus status)
    {
        super(true);
        this.nickname = nickname;
        this.exception = exception;
        this.status = status;
    }

    public PlayerStatus getStatus()
    {
        return this.status;
    }

    public void setStatus(final PlayerStatus status)
    {
        this.status = status;
    }

    public String getNickname()
    {
        return this.nickname;
    }

    public Exception getException()
    {
        return this.exception;
    }

    @Override
    public HandlerList getHandlers()
    {
        return handlers;
    }

    public static HandlerList getHandlerList()
    {
        return handlers;
    }

    @Override
    public String toString()
    {
        return "MojangServerLostEvent{" +
                       "nickname='" + this.nickname + '\'' +
                       ", exception=" + this.exception +
                       '}';
    }
} 

 


 

PlayerForceLoginEvent:

(Cancellable)

Wywoływany podczas logowania gracza, można tutaj zmienić wysyłaną wiadomość.

 

 

public class PlayerForceLoginEvent
        extends PlayerEvent
        implements Cancellable
{
    private static final HandlerList handlers = new HandlerList();
    private final LoginPlugin<?> loginPlugin;
    private final PlayerStatus   status;
    private       String         message;
    private       boolean        cancelled;

    public PlayerForceLoginEvent(final Player who, final LoginPlugin<?> loginPlugin, final PlayerStatus status, final String message)
    {
        super(who);
        this.loginPlugin = loginPlugin;
        this.status = status;
        this.message = message;
    }

    public LoginPlugin<?> getLoginPlugin()
    {
        return this.loginPlugin;
    }

    public PlayerStatus getStatus()
    {
        return this.status;
    }

    public String getMessage()
    {
        return this.message;
    }

    public void setMessage(final String message)
    {
        this.message = message;
    }

    @Override
    public boolean isCancelled()
    {
        return this.cancelled;
    }

    @Override
    public void setCancelled(final boolean 
    {
        this.cancelled = b;
    }

    @Override
    public HandlerList getHandlers()
    {
        return handlers;
    }

    public static HandlerList getHandlerList()
    {
        return handlers;
    }

    @Override
    public String toString()
    {
        return "PlayerForceLoginEvent{" +
                       "loginPlugin=" + this.loginPlugin +
                       ", cancelled=" + this.cancelled +
                       '}';
    }
} 

 


 

PlayerIpCacheLoadEvent:

(Cancellable)

Podczas szukania gracza w pamięci sesji.

 

 

public class PlayerIpCacheLoadEvent extends Event implements Cancellable
{
    private static final HandlerList handlers = new HandlerList();
    private final String  player;
    private       boolean cancelled;
    private       IpCache ipCache;

    public PlayerIpCacheLoadEvent(final String player, final IpCache ipCache)
    {
        this.player = player;
        this.ipCache = ipCache;
    }

    public String getPlayer()
    {
        return this.player;
    }

    public IpCache getIpCache()
    {
        return this.ipCache;
    }

    public void setIpCache(final IpCache ipCache)
    {
        this.ipCache = ipCache;
    }

    @Override
    public boolean isCancelled()
    {
        return this.cancelled;
    }

    @Override
    public void setCancelled(final boolean 
    {
        this.cancelled = b;
    }

    @Override
    public HandlerList getHandlers()
    {
        return handlers;
    }

    public static HandlerList getHandlerList()
    {
        return handlers;
    }

    @Override
    public String toString()
    {
        return "PlayerIpCacheLoadEvent{" +
                       "cancelled=" + this.cancelled +
                       ", player='" + this.player + '\'' +
                       ", ipCache=" + this.ipCache +
                       '}';
    }
} 

 


 

PlayerIpCacheSaveEvent:

(Cancellable)

Podczas zapisywania sesji gracza.

 

 

public class PlayerIpCacheSaveEvent extends PlayerEvent implements Cancellable
{
    private static final HandlerList handlers = new HandlerList();
    private boolean cancelled;
    private IpCache ipCache;

    public PlayerIpCacheSaveEvent(final Player who, final IpCache ipCache)
    {
        super(who);
        this.ipCache = ipCache;
    }

    public IpCache getIpCache()
    {
        return this.ipCache;
    }

    public void setIpCache(final IpCache ipCache)
    {
        this.ipCache = ipCache;
    }

    @Override
    public boolean isCancelled()
    {
        return this.cancelled;
    }

    @Override
    public void setCancelled(final boolean 
    {
        this.cancelled = b;
    }

    @Override
    public HandlerList getHandlers()
    {
        return handlers;
    }

    public static HandlerList getHandlerList()
    {
        return handlers;
    }

    @Override
    public String toString()
    {
        return "PlayerIpCacheSaveEvent{" +
                       "cancelled=" + this.cancelled +
                       ", ipCache=" + this.ipCache +
                       '}';
    }
} 

 


 

PlayerPreForceLoginEvent:

(Cancellable)

Wywoływany przed decyzją o tym czy gracz powinien zostać automatycznie zalogowany.

 

 

public class PlayerPreForceLoginEvent
        extends PlayerEvent
        implements Cancellable
{
    private static final HandlerList handlers = new HandlerList();
    private final LoginPlugin<?> loginPlugin;
    private       boolean        cancelled;
    private       PlayerStatus   playerStatus;
    private       boolean        enabledLogin;

    public PlayerPreForceLoginEvent(final Player who, final LoginPlugin<?> loginPlugin, final PlayerStatus playerStatus, final boolean enabledLogin)
    {
        super(who);
        this.loginPlugin = loginPlugin;
        this.playerStatus = playerStatus;
        this.enabledLogin = enabledLogin;
    }

    public LoginPlugin<?> getLoginPlugin()
    {
        return this.loginPlugin;
    }

    public PlayerStatus getPlayerStatus()
    {
        return this.playerStatus;
    }

    public void setPlayerStatus(final PlayerStatus playerStatus)
    {
        this.playerStatus = playerStatus;
    }

    public boolean isEnabledLogin()
    {
        return this.enabledLogin;
    }

    public void setEnabledLogin(final boolean enabledLogin)
    {
        this.enabledLogin = enabledLogin;
    }

    @Override
    public boolean isCancelled()
    {
        return this.cancelled;
    }

    @Override
    public void setCancelled(final boolean 
    {
        this.cancelled = b;
    }

    @Override
    public HandlerList getHandlers()
    {
        return handlers;
    }

    public static HandlerList getHandlerList()
    {
        return handlers;
    }

    @Override
    public String toString()
    {
        return "PlayerPreForceLoginEvent{" +
                       "cancelled=" + this.cancelled +
                       ", loginPlugin=" + this.loginPlugin +
                       ", playerStatus=" + this.playerStatus +
                       ", enabledLogin=" + this.enabledLogin +
                       '}';
    }
} 

 


 

ProcessLoginEvent:

Wywoływany w trakcie logowania, umożliwia zmianę UUID gracza za pomocą obiektu-wrappera "PlayerProfile"

(Coś jak PlayerPreLoginEvent, ale wcześniej)

 

 

public class ProcessLoginEvent extends Event
{
    private static final HandlerList handlers = new HandlerList();

    private final PlayerProfile profile;
    private final PlayerStatus  status;

    public ProcessLoginEvent(final PlayerProfile profile, final PlayerStatus status)
    {
        this.profile = profile;
        this.status = status;
    }

    public ProcessLoginEvent(final String nickanme, final UUID uuid, final PlayerStatus status)
    {
        this.profile = new PlayerProfile(nickanme, uuid);
        this.status = status;
    }

    public PlayerProfile getProfile()
    {
        return this.profile;
    }

    public PlayerStatus getStatus()
    {
        return this.status;
    }

    @Override
    public HandlerList getHandlers()
    {
        return handlers;
    }

    public static HandlerList getHandlerList()
    {
        return handlers;
    }

    @Override
    public String toString()
    {
        return "ProcessLoginEvent{" +
                       "profile=" + this.profile +
                       ", status=" + this.status +
                       '}';
    }
} 

PlayerProfile:

public class PlayerProfile
{
    private String nickname;
    private UUID   id;

    public PlayerProfile(final String nickname, final UUID id)
    {
        this.nickname = nickname;
        this.id = id;
    }

    public String getNickname()
    {
        return this.nickname;
    }

    public void setNickname(final String nickname)
    {
        this.nickname = nickname;
    }

    public UUID getId()
    {
        return this.id;
    }

    public void setId(final UUID id)
    {
        this.id = id;
    }

    @Override
    public int hashCode()
    {
        int result = (this.nickname != null) ? this.nickname.hashCode() : 0;
        result = 31 * result + ((this.id != null) ? this.id.hashCode() : 0);
        return result;
    }

    @Override
    public boolean equals(final Object o)
    {
        if (this == o)
        {
            return true;
        }
        if (! (o instanceof PlayerProfile))
        {
            return false;
        }

        final PlayerProfile that = (PlayerProfile) o;
        if ((this.id != null) ? ! this.id.equals(that.id) : (that.id != null))
        {
            return false;
        }
        return ! ((this.nickname != null) ? ! this.nickname.equals(that.nickname) : (that.nickname != null));

    }

    @Override
    public String toString()
    {
        return "PlayerProfile{" +
                       "nickname='" + this.nickname + '\'' +
                       ", id=" + this.id +
                       '}';
    }
} 

 


 

 

Dodatkowe funkcje:

 

 

Dodatkowo API posiada kilka ciekawych metod, np sprawdzanie czy dany nick jest nickiem "premium" za pomocą prostego zapytania:

https://www.minecraft.net/haspaid.jsp?user=nick 

Przykładowe użycia:

PlayerStatus status = isPremiumNickname("Notch"); 

Linijka ta wykona zwykłego zapytania, i w zależności od wyniku zwróci PlayerStatus.PREMIUM jeśli nick jest premium, PlayerStatus.CRACKED jeśli nick nie jest premium, oraz PlayerStatus.ERROR gdy sprawdzanie się nie powiedzie -> dość częsty błąd 502.
Najprostsze sposób by temu zapobiegać, jest wykonanie zapytania kilka razy -> gdy jedno się nie uda, robi drugie itd. Wystarczy dodać drugi argument określający maksymalną liczbę prób.

PlayerStatus status = isPremiumNickname("Notch", 5); 

Takie zapytania niestety zatrzymają cały serwer czekając na odpowiedz z zapytania, w tym celu została stworzona inna metoda, oraz specjalny Interface.

Przykład użycia:

package com.gmail.bukkitsmerf.autoin.commands;

import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;

import com.gmail.bukkitsmerf.autoin.api.AutoInAPI;
import com.gmail.bukkitsmerf.autoin.api.PlayerStatus;
import com.gmail.bukkitsmerf.autoin.api.PremiumCallback;

public class CheckNicknameCmd implements CommandExecutor
{
    @Override
    public boolean onCommand(final CommandSender sender, final Command cmd, final String alias, final String[] args)
    {
        if (args.length == 0)
        {
            sender.sendMessage("Musisz podać nick.");
            return true;
        }
        AutoInAPI.isPremiumNicknameAsync(args[0], 3, new PremiumCallback<String, PlayerStatus>()
        {
            @Override
            public void run(final String key, final PlayerStatus value)
            {
                if (value == PlayerStatus.ERROR)
                {
                    sender.sendMessage("Wystąpił błąd podczas sprawdzania gracza: " + key);
                }
                else
                {
                    sender.sendMessage("Gracz: " + key + " posiada konto: " + value);
                }
            }
        });
        return true;
    }
}

Taka komenda nie wpłynie na serwer, bo zapytanie odbędzie się w osobnym wątku, bardzo ważne by o tym pamiętać, bo kod w "PremiumCallback" też wykonuje się asynchronicznie, czyli nie można tam wpływać na bloki lub byty na serwerze, by to zrobić trzeba wrzucić taki kod do BukkitTaska (task w środku tego "run")

 


 

597881404139919424689.png

Plugin wymaga jedynie odpowiedniej wersji silnika, czyli dowolnego Spigota lub CraftBukkita dla 1.7.x. Czyli zgodnie z "poprawną" numeracją wersji serwerowych:

R1 (1.7.0-1.7.4),

R2 (1.7.5-1.7.8),

R3 (1.7.9),

R4 (1.7.10, spigotowe wsparcie 1.8)

Dodatkowo plugin wspiera silnik Cauldron, dawny MCPC+, pozwalający grać z modami i pluginami.

Wspierane są obie wersje: na 1.7.2 i 1.7.10 i możliwe że kolejne wersje też będą działać dobrze.

 

Auto-logowanie jest domyślnie wspierane dla 3 pluginów:

LogIt

AuthMe

xAuth

 

Dodatkowo dla lepszej wydajności, dla większej stabilności i ogólnie lepszego działania warto zaopatrzyć się w plugin ProtocolLib (dla 1.8 -> ProtocolLib), nie jest on jednak wymagany do działania. PS: ProtocolLib działa też na cauldronie ;)

 

No i oczywiście dla tych co chcą używać skrytpowego API, potrzebny będzie plugin Skript.

 

201621404139920424689.png

Download z oficjalnej strony projektu na spigocie.

 

Najnowsza wersja: 2.0-fix.2

http://www.spigotmc.org/resources/auto-in.578/download?version=5665

Proszę o nie zgłaszanie błędów dotyczących starszych wersji, a tym bardziej 1.0, wersja 1.0 nie jest już wspierania, a wszystkie pozostałe były tylko wersjami przejściowymi/rozwojowymi itd.

 

 

Wsparcie dla Bungee

Tak, wiem, chcecie wsparcie dla bungee, pojawi się, ale już raczej nie ja je dodam ;) Zrobi to znajomy, co przejmuje moje projekty. Na pewno sobie z tym poradzi, albo nawet sprawi ten plugin lepszym niż jest teraz.

PS: Jednak aktualne błędy, problemy itd, rozwiązuje jeszcze ja, i raczej będzie tak przynajmniej do świąt.

 

 

Dotacje

Zawieszone, z powodu zmiany "właściciela" projektu.

 

Podziękujmy wszystkim dotychczasowym donatorom:


LucasEasedUp:
"Należy się, dla naszej zapracowanej Smerfetki ;>"
(40 PLN)​
avaterys:
"Za ten kawał dobrej roboty"
(30 PLN)​
AC3-Servers:
"Love from Someone Special"
(26 PLN)​
isuzutsuki:
"You deserve cookies ;3"
(10 PLN)​

misiecon:
(5 PLN)​

Dzikoysk:
"Na cukierka" ;3
(1 PLN)​

 

Kilka dodatkowych informacji o dotacjach (FAQ)

 

Bo kilka ludzików się pytało, to mały spis pytań i odpowiedzi.

 

Czy to twoje konto PayPal?

Tak i nie, należy do mojego znajomego, który zgodził się dodać mój adres e-mail do jego konta, dlaczego tak? Bo dalej mam tylko 17 latek, i same problemy by wybłagać rodziców o konto :D (wiecie, oszustwa, czarna magia, itd)

 

Kto będzie widoczny na liście donatorów:

Każdy kto chce. (dodaj wiadomość o tym że nie chcesz być dodany)

 

Dlaczego wszystkie dotacje na liście są w PLN?

Dla ułatwienia mojego życia, wpłaty od zagranicznych osób przeliczam na PLN i podaje tutaj już gotowy "wynik"

 

Jak dużo osób może znaleźć się na liście?

Myślę że do 10, chyba że uda się zmieścić więcej, jednak reszta osób na pewno nie zniknie, tylko pojawi się w dodatkowym spoilerze.

 

Kilka pytań więcej dostępnych jest w temacie na forum spigota, jednak tutaj mogły by się trochę kłócić z regulaminem :P

 

 

Zabraniam dodawania pluginu do paczek (serwerowych itp.) bez mojej zgody, i podawania innego download niż oryginalny (z strony spigota).

To już jest koniec smerfa:


http://www.mpcforum.pl/topic/1323530-info-znikam/


GG: 48522543


PS: Na innych forach i stronach znajdziesz mnie pod nickiem: 


BukkitSmerf

  • Odpowiedzi 289
  • Dodano
  • Ostatniej odpowiedzi
Opublikowano

Aktualnie pracuję nad dodatkiem do tego pluginu. No wiecie... Dodawanie do tej WL, usuwanie.

Dodam także wiadomości dołączyłeś do gry z konta premium i usunę Successful Login przy dolaczaniu premium. (Dolaczyles z non premium tez dodam)..

Opublikowano

PS: jak tylko AuthMe naprawi błąd wrzuce poprawke pluginu by też działalo z AuthMe, ale tak to polecam LogIt lub ewentualnie te xAuth.

Ale LogIt to naprawdę dobry plugin :>

To już jest koniec smerfa:


http://www.mpcforum.pl/topic/1323530-info-znikam/


GG: 48522543


PS: Na innych forach i stronach znajdziesz mnie pod nickiem: 


BukkitSmerf

Opublikowano

PS: jak tylko AuthMe naprawi błąd wrzuce poprawke pluginu by też działalo z AuthMe, ale tak to polecam LogIt lub ewentualnie te xAuth.

Ale LogIt to naprawdę dobry plugin :>

xAuth ma bugi, a LogIt ma trudne API. Czekam na AuthMe :D

Opublikowano

xAuth ma bugi, a LogIt ma trudne API. Czekam na AuthMe :D

To będziesz musiał czekać do piątku/soboty :P

Wcześniej nie zamierzam już nic naprawiać, mam co innego do roboty

To już jest koniec smerfa:


http://www.mpcforum.pl/topic/1323530-info-znikam/


GG: 48522543


PS: Na innych forach i stronach znajdziesz mnie pod nickiem: 


BukkitSmerf

Opublikowano

No! Stabilna wersja z wsparciem pod LogIT, genialna jesteś.

Teraz czekać na AuthMe i inne, tylko pytanie, do Bunge też dasz radę? o.O

Opublikowano

No! Stabilna wersja z wsparciem pod LogIT, genialna jesteś.

Teraz czekać na AuthMe i inne, tylko pytanie, do Bunge też dasz radę? o.O

 

 

 

PS: nie, nie dodam wsparcie bunnge cord.
Opublikowano

Tja, nie dodam raczej :>

Nie ma po co, jak to ludzie używający bunngecorda mówią:

"Na bunnge servery stawiają tylko profesjonaliści"

Więc nie rozumiem po co profesjonalistą jakiś plugin z neta? są profesjonalistami, mogą sobie napisać ;)

To już jest koniec smerfa:


http://www.mpcforum.pl/topic/1323530-info-znikam/


GG: 48522543


PS: Na innych forach i stronach znajdziesz mnie pod nickiem: 


BukkitSmerf

Opublikowano

Nie wiem po co ale ok :D

szczególnie że authMe na razie raczej niezbyt działa :P

To już jest koniec smerfa:


http://www.mpcforum.pl/topic/1323530-info-znikam/


GG: 48522543


PS: Na innych forach i stronach znajdziesz mnie pod nickiem: 


BukkitSmerf

Opublikowano

Nie wiem po co ale ok :D

szczególnie że authMe na razie raczej niezbyt działa :P

 

Ja mam te wersje co mi kazałaś testować na GG i all działa. Czyści itemy graczowi premium i tylko tyle :P

Opublikowano

Acha! znalazłem buga! xD

Otóż plugin jest świetny ale buguje się z pluginem AntiOp, kiedy gracz ma opa i premium to mu tego opa zabiera kiedy chce użyć komendy którą mają tylko opy, np /day

Opublikowano

Acha! znalazłem buga! xD

Otóż plugin jest świetny ale buguje się z pluginem AntiOp, kiedy gracz ma opa i premium to mu tego opa zabiera kiedy chce użyć komendy którą mają tylko opy, np /day

 

Możesz napisać plugin w którym będzie event na autoop dla danych graczy.

Opublikowano

Acha! znalazłem buga! xD

Otóż plugin jest świetny ale buguje się z pluginem AntiOp, kiedy gracz ma opa i premium to mu tego opa zabiera kiedy chce użyć komendy którą mają tylko opy, np /day

o.O ale co ma jeden plugin do 2 :D

Chyba że używasz AuthMe, wtedy wszystko jest możliwe!

To już jest koniec smerfa:


http://www.mpcforum.pl/topic/1323530-info-znikam/


GG: 48522543


PS: Na innych forach i stronach znajdziesz mnie pod nickiem: 


BukkitSmerf

Opublikowano

używam log it i kiedy mam twój plugin to kiedy gracz ma opa i wchodzi z konta premium to mu go zabiera, bo antiop uważa że gracz się nie zalogował i jest oszustem czy jakoś tak :D

Opublikowano

używam log it i kiedy mam twój plugin to kiedy gracz ma opa i wchodzi z konta premium to mu go zabiera, bo antiop uważa że gracz się nie zalogował i jest oszustem czy jakoś tak :D

 

LogIt jest w fazie Beta w tym pluginie.

Opublikowano

Wrzuciłam update 0.3


Główną zmianą jest naprawione wsparcie AuthMe - działa i nie usuwa EQ :P


I do tego możliwość włączenia/wyłączenia whitelisty z poziomu API i skrypta :>


To już jest koniec smerfa:


http://www.mpcforum.pl/topic/1323530-info-znikam/


GG: 48522543


PS: Na innych forach i stronach znajdziesz mnie pod nickiem: 


BukkitSmerf

Opublikowano

Ten plugin działa, Mam konto PREMIUM, wbijam na serwer (mam plugin authme) i nie muszę się logować! Super!, Ale gracze non-premium nie mogą wbić! mam online-mode=false

Opublikowano

Ten plugin działa, Mam konto PREMIUM, wbijam na serwer (mam plugin authme) i nie muszę się logować! Super!, Ale gracze non-premium nie mogą wbić! mam online-mode=false

masz mieć online-mode=true (ale plugin po stracie sam powinien zmieniać na true :P), i na 100% mogą wbić ALE nie mogą mieć nicku premium :P

Czy nick jest premium możesz spr za pomocą:

https://www.minecraft.net/haspaid.jsp?user=

np:

https://www.minecraft.net/haspaid.jsp?user=BukkitSmerf

zwraca false, więc mogę wbić z launchera no-premium :P

To już jest koniec smerfa:


http://www.mpcforum.pl/topic/1323530-info-znikam/


GG: 48522543


PS: Na innych forach i stronach znajdziesz mnie pod nickiem: 


BukkitSmerf

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...