Skocz do zawartości
  • 0

Logowanie premium


Pytanie

Witam, tworzę publiczny plugin na logowanie premium. Słyszałem że limit sprawdzania czy gracz ma konto premium wynosi 600 na 10min. Można to powiekszyc w jakis sposob?

 

public static boolean check(String name){
		try{
			URL url = new URL("https://api.mojang.com/users/profiles/minecraft/" + name);
			BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
			String hasPaid;
			if ((hasPaid = in.readLine()) != null) {
				in.close();
				return true;
			}
			in.close();
		} catch (MalformedURLException localMalformedURLException) {
		} catch (IOException localIOException) {
		}
		return false;
	}

 

Odnośnik do komentarza
https://skript.pl/temat/39420-logowanie-premium/
Udostępnij na innych stronach

8 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0
23 minuty temu, Toranktto napisał:

Nie, ten limit nie jest po twojej stronie, nic nie możesz zrobić. Po prostu cachuj odpowiedzi serwera.

Tak wiem zapisuje to lecz i tak musze sprawdzac czy gracz nie zmienil nicku itd. 

 

33 minuty temu, Tymekd napisał:

raczej nie, możesz używać api jakiejś strony autoryzującej.

Przykłady takich stron?

Odnośnik do komentarza
https://skript.pl/temat/39420-logowanie-premium/#findComment-247414
Udostępnij na innych stronach

  • 0

Spróbuj użyć tego API connectora:

https://sessionserver.mojang.com/session/minecraft/hasJoined?username=<NICK>&serverId=<SERVER_ID_HASH>

Wartość NICK - wiadomo, natomiast co do wartości SERVER_ID_HASH tu się pojawia ciekawa zabawa w algorytmy, hashowanie, tworzenie kluczy etc. O co z tym chodzi? Nie wiem jak bardzo zaawansowany jesteś (może tylko podstawy), ale jeśli chcesz dojść do tego "jak to jest zrobione" to przejrzyj sobie plugin MinecraftOnlineAuthenticator (szczególnie klasy: MinecraftOnlineValidator.java, HasjoinedAPI.java i MinecraftEncryptionUtils.java). Myślę, że to będzie idealne wyjaśnienie, dlaczego jest tak mało pluginów na logowanie premium.

Odnośnik do komentarza
https://skript.pl/temat/39420-logowanie-premium/#findComment-247436
Udostępnij na innych stronach

  • 0

Nie, nie można. Ogólnie do samego tego kodu to nie jest to zbytnio dobry pomysł robić to w taki sposób, ten kod przepuści tylko gracza z nickiem gracze który zakupił premium, czyli również z graczami nonpremium z nickiem graczy premium więc może się to nie skończyć zbytnio dobrze :V Lepszym sposobem jest to co napisał wyżej @Fadex lecz może to być trudne chyba, że już kodzisz od dłuższego czasu :V 

Edytowane przez Peridot
Odnośnik do komentarza
https://skript.pl/temat/39420-logowanie-premium/#findComment-247453
Udostępnij na innych stronach

  • 0
11 minut temu, MocSwiatla320 napisał:

Czyli hashowane ip to:

String ip = URLEncoder.encode(addr.getHostAddress(), StandardCharsets.UTF_8.name());

Dobra, czyli jednak podstawy. Hashowanie to stworzenie za pomocą algorytmów hashowania (w naszym przypadku będzie to AES, RSA, SHA1 - cokolwiek to dla Ciebie obecnie znaczy) odpowiedniego "hashu" (nieprzypadkowego ciągu znaków), który jest właśnie potrzebny w tym API. To co napisałeś to enkodowanie adresu IP na standard UTF-8, by użyć go później w adresie URL API. Zanim ruszysz dalej w tworzenie takiego pluginu (i tu ostrzegam, że to nie będzie proste) musisz "ogarnąć" podstawy Javy (może już je znasz), trochę informacji o bibliotekach javax.crypto i przede wszystkim algorytmy szyfrowania (co i jak i z czym to się je). Mogę Ci tylko podpowiedzieć, że wszystko masz zasadniczo "podane na talerzu". Z masy tego kodu do stworzenia "hashu" będziesz potrzebował jeszcze secret key, który (w tym pluginie) jest generowany w klasie OnlineProtocolListener.java (linia 97) z wykorzystaniem pakietów ProtocolLib'a. Dużo z tym zabawy, ale to obecnie chyba jedyna metoda zrobienia tego.

Edytowane przez Fadex
Odnośnik do komentarza
https://skript.pl/temat/39420-logowanie-premium/#findComment-247520
Udostępnij na innych stronach

  • 0

Dobra a wie ktoś może dlaczego w konsoli wyskakuje błąd: 

java.lang.IllegalStateException: No session!
	at net.md_5.bungee.query.QueryHandler.handleMessage(QueryHandler.java:95)
	at net.md_5.bungee.query.QueryHandler.channelRead0(QueryHandler.java:56)
	at net.md_5.bungee.query.QueryHandler.channelRead0(QueryHandler.java:22)
	at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:377)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:355)
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:377)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363)
	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
	at io.netty.channel.epoll.EpollDatagramChannel.read(EpollDatagramChannel.java:679)
	at io.netty.channel.epoll.EpollDatagramChannel.access$100(EpollDatagramChannel.java:58)
	at io.netty.channel.epoll.EpollDatagramChannel$EpollDatagramChannelUnsafe.epollInReady(EpollDatagramChannel.java:497)
	at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:475)
	at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:378)
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
	at java.lang.Thread.run(Thread.java:748)

 

Odnośnik do komentarza
https://skript.pl/temat/39420-logowanie-premium/#findComment-247521
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ę...