Skocz do zawartości
  • 0

Premium


_AvaX_

Pytanie

5 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

No musisz wykonać autoryzacje z mojangiem, zgodnie z protokołem http://wiki.vg/Protocol Ale tylko dla graczy co mają nick premium - bo inaczej client non-premium się rozłączy.
A tak to najwygodniej zrobić to pod bungee, tam w evencie od początku logowania masz zwyczajnie metodę do ustawienia czy gracz ma być autoryzowany, dla każdego connection można ustawić .setOnlineMode czy jakos tak

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

Zawsze możesz sprawdzić czy gracz jest premium, i jeżeli tak to ustawiać "połączenie" na onlinemode.

private boolean hasPaid(String nick) {
        try {
            final URL url = new URL("https://api.mojang.com/users/profiles/minecraft/" + nick);
            final BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
            String hasPaid;
            if ((hasPaid = reader.readLine()) != null) {
                reader.close();
                return true;
            }
            else{
                reader.close();
                return false;
            }
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

//BungeeCord, onEnable()
        this.getProxy().getPluginManager().registerListener(this, new Listener() {
            @EventHandler
            public void onConnect(PreLoginEvent e) {
                if (e.isCancelled()) return;
                final ProxiedPlayer proxiedPlayer = getProxy().getPlayer(e.getConnection().getName());
                final User u = User.getUser(proxiedPlayer);
                if (hasPaid(e.getConnection().getName())) {
                    u.setPremium(true);
                    e.getConnection().setOnlineMode(true);
                    this.getLogger().info("Player "+e.getConnection().getName()+" has paid for premium account);
                } else {
                    u.setPremium(false);
                    e.getConnection().setOnlineMode(false);
                }
            }
        });

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
10 minut temu, yooniks napisał:

Zawsze możesz sprawdzić czy gracz jest premium, i jeżeli tak to ustawiać "połączenie" na onlinemode.


private boolean hasPaid(String nick) {
        try {
            final URL url = new URL("https://api.mojang.com/users/profiles/minecraft/" + nick);
            final BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
            String hasPaid;
            if ((hasPaid = reader.readLine()) != null) {
                reader.close();
                return true;
            }
            else{
                reader.close();
                return false;
            }
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

//BungeeCord, onEnable()
        this.getProxy().getPluginManager().registerListener(this, new Listener() {
            @EventHandler
            public void onConnect(PreLoginEvent e) {
                if (e.isCancelled()) return;
                final ProxiedPlayer proxiedPlayer = getProxy().getPlayer(e.getConnection().getName());
                final User u = User.getUser(proxiedPlayer);
                if (hasPaid(e.getConnection().getName())) {
                    u.setPremium(true);
                    e.getConnection().setOnlineMode(true);
                    this.getLogger().info("Player "+e.getConnection().getName()+" has paid for premium account);
                } else {
                    u.setPremium(false);
                    e.getConnection().setOnlineMode(false);
                }
            }
        });

 

Dzięki wielkie ale nie wiem czy w ten sposób nie będzie można wpisać np. W shiginima launcher nicku Notch itp. 

No I zależy mi na nie używaniu bungee corda jednak chciałbym tego użyć w dodatku do skripta i na tym mi zależy tylko że cholera nie umiem

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
37 minut temu, Quaczi napisał:

Dzięki wielkie ale nie wiem czy w ten sposób nie będzie można wpisać np. W shiginima launcher nicku Notch itp. 

No I zależy mi na nie używaniu bungee corda jednak chciałbym tego użyć w dodatku do skripta i na tym mi zależy tylko że cholera nie umiem

Będzie można, na takiej samej zasadzie działało moje "api" PremiumStatus.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
3 godziny temu, yooniks napisał:

Zawsze możesz sprawdzić czy gracz jest premium, i jeżeli tak to ustawiać "połączenie" na onlinemode.


private boolean hasPaid(String nick) {
        try {
            final URL url = new URL("https://api.mojang.com/users/profiles/minecraft/" + nick);
            final BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
            String hasPaid;
            if ((hasPaid = reader.readLine()) != null) {
                reader.close();
                return true;
            }
            else{
                reader.close();
                return false;
            }
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

//BungeeCord, onEnable()
        this.getProxy().getPluginManager().registerListener(this, new Listener() {
            @EventHandler
            public void onConnect(PreLoginEvent e) {
                if (e.isCancelled()) return;
                final ProxiedPlayer proxiedPlayer = getProxy().getPlayer(e.getConnection().getName());
                final User u = User.getUser(proxiedPlayer);
                if (hasPaid(e.getConnection().getName())) {
                    u.setPremium(true);
                    e.getConnection().setOnlineMode(true);
                    this.getLogger().info("Player "+e.getConnection().getName()+" has paid for premium account);
                } else {
                    u.setPremium(false);
                    e.getConnection().setOnlineMode(false);
                }
            }
        });

 

ja [ciach], czy ktoś na tym forum umie obsługiwać wyjątki?

        catch (Exception e) {
            e.printStackTrace();
        }
        return false;

co to ma być... API mojangu cię np zbanuje na chwilę i nawet się o tym nie dowiesz, bo nie obsługujesz wyjątku w żaden sensowny sposób, a gracz wtedy zawsze zostanie uznany za pirata - czyli w przypadku błędu ktoś może się włamać na inne konto...

 

//Wulgaryzm @JPablo

Edytowane przez JPablo
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ę...