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

[Problem] Java FirstJoinEvent


Gość vix0n

Rekomendowane odpowiedzi

Opublikowano

Cześć, jestem początkujący w pisaniu pluginów. Usiłuję napisać prostego antybota polega on na zasadzie kickania przy pierwszym wejściu. Nie znam wszystkich eventów, ponieważ strona, które je posiadała, nie działa.

 

Dlaczego przy tym, jak wchodzę po raz pierwszy nie pisze powód czyli  ,,Hejo'' tylko:

 

internal exception java.lang.classcastexception bit cannot be cast to fm

oto kawałek kodu.

 

       public void onFirstJoinEvent(PlayerJoinEvent event) {

         Player player = event.getPlayer();
         if(!event.getPlayer().hasPlayedBefore()) {
              player.kickPlayer("Hejo");

 

daje lajky ;3

Opublikowano
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package me.invictus;

import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;

/**
 *
 * @ Invictus
 */
public class Main extends JavaPlugin implements Listener{
    
    
    @Override
    public void onEnable(){
        this.getServer().getPluginManager().registerEvents(this, this);
    }
    
    @EventHandler
    public void onFirstJoin(PlayerJoinEvent e){
        Player p = e.getPlayer();
    
          if(!e.getPlayer().hasPlayedBefore()) {
             p.kickPlayer("Spierdalaj bocie :P");
          }
    }  
}


 

Proszę.

      "BO NIE MA GORSZEJ NĘDZY NIŻ BRAK PIENIĘDZY"

Opublikowano

Ale sprawdzanie przy PlayerJoinEvent i metodzie hasPlayedBefore(), która odczytuje, czy gracz wcześniej był na serwerze na zasadzie plików w folderze głównego świata jest bez sensu.

Bot tak czy tak wejdzie, a wyrzucanie go od razu przy wejściu przy większej ilości graczy może wyrzucić errory w konsoli.

 

Przy PlayerLoginEvent sobie to zrób, tylko że wtedy musisz odczytywać, czy gracz pierwszy raz wchodzi na serwer nie przez metodę hasPlayedBefore(), tylko zapis w YAML'u/SQLite.

P.S. takie coś już jest - AntiBot stworzony przez filipopa i Molkę - poszukaj na MPC. ;)

5465845486.png

Opublikowano

@Risen.

 

Wychodzi tak naprawde na to samo , jedyny sensowny pomysl na anulowanie polaczenia jest to handshake? 

Opublikowano

Ale sprawdzanie przy PlayerJoinEvent i metodzie hasPlayedBefore(), która odczytuje, czy gracz wcześniej był na serwerze na zasadzie plików w folderze głównego świata jest bez sensu.

Bot tak czy tak wejdzie, a wyrzucanie go od razu przy wejściu przy większej ilości graczy może wyrzucić errory w konsoli.

 

Przy PlayerLoginEvent sobie to zrób, tylko że wtedy musisz odczytywać, czy gracz pierwszy raz wchodzi na serwer nie przez metodę hasPlayedBefore(), tylko zapis w YAML'u/SQLite.

P.S. takie coś już jest - AntiBot stworzony przez filipopa i Molkę - poszukaj na MPC. ;)

filipPopa przez 2 x "p" xD

 

@Risen.

 

Wychodzi tak naprawde na to samo , jedyny sensowny pomysl na anulowanie polaczenia jest to handshake? 

Tak, ale za to np. pluginy nie zapisuja danych (bukkit w playerdata tez nie), nie laduje mapy, nie ma join/left, nie ma jakis wiadomosci powitalnych typu "filippop1 zagoscil pierwszy raz na serwerze!" itd.

 

Spacja przed znakiem interpunkcyjnym

[*] j. polski

@topic

Nie pisze Ci ten powod, bo wyrzucasz gracza kiedy laduje mu sie mapa (w czasie gdy mu z "logging in..." zamienia sie na "Downloading terrain...") i wywala Ci blad wczytywania mapy. Musisz playerloginevent anulowac.

 

 

Jak to @TheMolkaPL napisal:

1. Klient łączy się z serwerem

2. W serwerze następuje AsyncPlayerPreLoginEvent oraz w tym samym czasie klientowi zmienia się napis "Connecting to x..." na "Logging in...".

3. Jeżeli w evencie następuje disallow to gracza wywala z logowania.

4. Inaczej serwer tworzy obiekt Player, dodaje go do listy online, wykonuje PlayerJoinEvent, ogłasza "x joined the game." oraz klientowi zmienia się napis "Logging in..." na "Downloading terrain...".

5. Jeżeli gracz zostanie wyrzucony w tym momencie to klient dostanie informacje o błędnym pobieraniu mapy, nie wiadomość o kicku. 

Opublikowano

RAFALLALY

Dziękówka, tylko że nadal nie pokazuje powodu kicka ;/

 

 

internal exception java.lang.classcastexception bit cannot be cast to fm
Opublikowano

 

@EventHandler(priority=EventPriority.LOWEST)
public void onLogin(PlayerLoginEvent e) throws IOException{
    String plik = "AntyBot/users/" + e.getPlayer().getName() + ".ns";
    File f = new File(plik);
    if(f.exists()){
        return;
    }
    e.disallow(PlayerLoginEvent.Result.KICK_OTHER, "§aZaloguj sie ponownie!");
    new File(plik).createNewFile();
 
}

 

Powinno działać.

Potrzebujesz tanich punktów na Pukawka.pl?


Pisz PW! ;)

Opublikowano

RAFALLALY

Dziękówka, tylko że nadal nie pokazuje powodu kicka ;/

Gdybys czytal wszystkie posty to bys wiedzial dlaczego tak nie jest ;x

 

Nie pisze Ci ten powod, bo wyrzucasz gracza kiedy laduje mu sie mapa (w czasie gdy mu z "logging in..." zamienia sie na "Downloading terrain...") i wywala Ci blad wczytywania mapy. Musisz playerloginevent anulowac.

 

 

Jak to @TheMolkaPL napisal:

1. Klient łączy się z serwerem

2. W serwerze następuje AsyncPlayerPreLoginEvent oraz w tym samym czasie klientowi zmienia się napis "Connecting to x..." na "Logging in...".

3. Jeżeli w evencie następuje disallow to gracza wywala z logowania.

4. Inaczej serwer tworzy obiekt Player, dodaje go do listy online, wykonuje PlayerJoinEvent, ogłasza "x joined the game." oraz klientowi zmienia się napis "Logging in..." na "Downloading terrain...".

5. Jeżeli gracz zostanie wyrzucony w tym momencie to klient dostanie informacje o błędnym pobieraniu mapy, nie wiadomość o kicku. 

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...