Skocz do zawartości

EntityPlayer widoczny na tabie


MineAnonim

Rekomendowane odpowiedzi

Cześć! Szukam sposobu na stworzenie fake gracza widocznego na tabie. Chciałbym, aby po restarcie nie znikał. Ew. Po relognięciu.

 

Pakietami raczej się tego nie zrobi? :/ Bo te, byłyby wysłane do każdego gracza z osobna, a gdyby serwer był pusty, to fake graczy by nie było - tego nie chcę :/

 

Moim celem jest możliwość przebywania na serwerze tylko fake graczy.. 

 

Jakiś sposób? Z góry dzięki :)

Odnośnik do komentarza
Udostępnij na innych stronach

 

PacketPlayOutPlayerInfo

I nawet, jeżeli nikogo nie będzie na serwerze, to ten npc zostanie?

 

Mi chodzi o stworzenie takiego bota nie po to, żeby sobie był :D Opisałem tylko w czym potrzebuję pomocy :) Ale dzięki

 

 

tworzysz fake GameProfile od 1.8+ i wysyłasz pakiet PacketPlayOutPlayerInfo z tym gameprofile, no ale taki pakiet musisz wysłać do gracza, bo to on widzi tabliste.

 

taki sam efekt można osiagnac uzywajac protocolliba, jest mnóstwo kodu jak takie coś wykonać i jest bardziej przystepne dla kogos, kto nigdy sie nie bawil pakietami

 

 

 

 

fKJeAI4.jpg

 

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

 

 

PacketPlayOutPlayerInfo

I nawet, jeżeli nikogo nie będzie na serwerze, to ten npc zostanie?

 

Mi chodzi o stworzenie takiego bota nie po to, żeby sobie był :D Opisałem tylko w czym potrzebuję pomocy :) Ale dzięki

 

 

tworzysz fake GameProfile od 1.8+ i wysyłasz pakiet PacketPlayOutPlayerInfo z tym gameprofile, no ale taki pakiet musisz wysłać do gracza, bo to on widzi tabliste.

 

taki sam efekt można osiagnac uzywajac protocolliba, jest mnóstwo kodu jak takie coś wykonać i jest bardziej przystepne dla kogos, kto nigdy sie nie bawil pakietami

 

Okej już chyba wiem :) Dziękuję wszystkim!

Odnośnik do komentarza
Udostępnij na innych stronach

Jeszcze jedno. Czy stworzenie fake gameprofile'u sloty na liście serwerów będą się zmieniały? ~Czy fake player będzie liczony jako gracz w liczbie graczy online na serwerze.

Jeżeli chodzi Ci o to czy taki pakiet będzie powodować zwiększenie się zajętych slotów to oczywiście że nie. Pakiet PlayerInfo jest jedynie na tabie. 

Moja oficjalna strona! :)

http://socketbyte.pl/ 

Odnośnik do komentarza
Udostępnij na innych stronach

 

Jeszcze jedno. Czy stworzenie fake gameprofile'u sloty na liście serwerów będą się zmieniały? ~Czy fake player będzie liczony jako gracz w liczbie graczy online na serwerze.

Jeżeli chodzi Ci o to czy taki pakiet będzie powodować zwiększenie się zajętych slotów to oczywiście że nie. Pakiet PlayerInfo jest jedynie na tabie. 

 

Hm :/ A co może powodować taki efekt? Chciałbym to ewentualnie połączyć..

Odnośnik do komentarza
Udostępnij na innych stronach

Na zajęcie dodatkowego slotu masz całą plejadę opcji, najprościej chyba odrzucić połączenie przy logowaniu nowego gracza jeśli nowa maksymalna liczba slotów jest osiągnięta.

P.S. Nie potrzebujesz fejkowego gracza żeby zająć slot, nawet nic Ci to nie da. Może powiesz nam jaki masz plan?

Dodaj mój nick do posta jeśli potrzebujesz pomocy | Piszę pluginy na zlecenie | Pomagam z Linuxem

newlogo.png

Odnośnik do komentarza
Udostępnij na innych stronach

Najłatwiejszą opcją jest użycie ProtocolLiba

ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(instance, PacketType.Status.Server.SERVER_INFO))
{
    public void onPacketSending(PacketEvent event)
    {
        WrappedServerPing ping = (WrappedServerPing) event.getPacket().getServerPings().read(0);
        ping.setPlayersOnline(#ilosc#);

        event.getPacket().getServerPings().write(0, ping);
    }
}

A jak nie chcesz używać ProtocolLiba to robisz podobnie, pakiet ServerInfo (nie znam dokładnie nazwy), ustawiasz parę rzeczy i wysyłasz jakoś

Moja oficjalna strona! :)

http://socketbyte.pl/ 

Odnośnik do komentarza
Udostępnij na innych stronach

Najłatwiejszą opcją jest użycie ProtocolLiba

ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(instance, PacketType.Status.Server.SERVER_INFO))
{
    public void onPacketSending(PacketEvent event)
    {
        WrappedServerPing ping = (WrappedServerPing) event.getPacket().getServerPings().read(0);
        ping.setPlayersOnline(#ilosc#);

        event.getPacket().getServerPings().write(0, ping);
    }
}

A jak nie chcesz używać ProtocolLiba to robisz podobnie, pakiet ServerInfo (nie znam dokładnie nazwy), ustawiasz parę rzeczy i wysyłasz jakoś

Ślicznie dziękuję :)

Odnośnik do komentarza
Udostępnij na innych stronach

										 		 ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(instance, PacketType.Status.Server.SERVER_INFO){
												     public void onPacketSending(PacketEvent event)
												     {
												         WrappedServerPing ping = (WrappedServerPing) event.getPacket().getServerPings().read(0);
												         ping.setPlayersOnline(5);

												         event.getPacket().getServerPings().write(0, ping);
												     }
												 });

Jest problem :/ Użyłem tego kodu w pętli po wejściu gracza. Żeby uaktualniało się kiedy jest to potrzebne. Ta "5" jest żeby sprawdzić :;/ Bo wiem, że z tym kodem pętla byłaby bezsensowna.. Nie działa to. W onenable mam protocolmanagera zarejestrowanego..

Odnośnik do komentarza
Udostępnij na innych stronach

										 		 ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(instance, PacketType.Status.Server.SERVER_INFO){
												     public void onPacketSending(PacketEvent event)
												     {
												         WrappedServerPing ping = (WrappedServerPing) event.getPacket().getServerPings().read(0);
												         ping.setPlayersOnline(5);

												         event.getPacket().getServerPings().write(0, ping);
												     }
												 });

Jest problem :/ Użyłem tego kodu w pętli po wejściu gracza. Żeby uaktualniało się kiedy jest to potrzebne. Ta "5" jest żeby sprawdzić :;/ Bo wiem, że z tym kodem pętla byłaby bezsensowna.. Nie działa to. W onenable mam protocolmanagera zarejestrowanego..

 

Po 1. czemu w pętli, po 2. czemu po wejściu gracza? Przecież to ma się pojawiać przed wejściem gracza xD

 

Zrób to w evencie ServerListPingEvent, albo w onEnable() bo szczerze nie wiem jak to działa dokładnie.

Moja oficjalna strona! :)

http://socketbyte.pl/ 

Odnośnik do komentarza
Udostępnij na innych stronach

 

										 		 ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(instance, PacketType.Status.Server.SERVER_INFO){
												     public void onPacketSending(PacketEvent event)
												     {
												         WrappedServerPing ping = (WrappedServerPing) event.getPacket().getServerPings().read(0);
												         ping.setPlayersOnline(5);

												         event.getPacket().getServerPings().write(0, ping);
												     }
												 });

Jest problem :/ Użyłem tego kodu w pętli po wejściu gracza. Żeby uaktualniało się kiedy jest to potrzebne. Ta "5" jest żeby sprawdzić :;/ Bo wiem, że z tym kodem pętla byłaby bezsensowna.. Nie działa to. W onenable mam protocolmanagera zarejestrowanego..

 

Po 1. czemu w pętli, po 2. czemu po wejściu gracza? Przecież to ma się pojawiać przed wejściem gracza xD

 

Zrób to w evencie ServerListPingEvent, albo w onEnable() bo szczerze nie wiem jak to działa dokładnie.

 

Ad1 Ponieważ liczba graczy ma pokrywać się z liczbą fake graczy. Po wejściu będzie setowało liczbę graczy + liczbę botów.

 

2. Ok spróbuję

Odnośnik do komentarza
Udostępnij na innych stronach

 

 

										 		 ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(instance, PacketType.Status.Server.SERVER_INFO){
												     public void onPacketSending(PacketEvent event)
												     {
												         WrappedServerPing ping = (WrappedServerPing) event.getPacket().getServerPings().read(0);
												         ping.setPlayersOnline(5);

												         event.getPacket().getServerPings().write(0, ping);
												     }
												 });

Jest problem :/ Użyłem tego kodu w pętli po wejściu gracza. Żeby uaktualniało się kiedy jest to potrzebne. Ta "5" jest żeby sprawdzić :;/ Bo wiem, że z tym kodem pętla byłaby bezsensowna.. Nie działa to. W onenable mam protocolmanagera zarejestrowanego..

 

Po 1. czemu w pętli, po 2. czemu po wejściu gracza? Przecież to ma się pojawiać przed wejściem gracza xD

 

Zrób to w evencie ServerListPingEvent, albo w onEnable() bo szczerze nie wiem jak to działa dokładnie.

 

Ad1 Ponieważ liczba graczy ma pokrywać się z liczbą fake graczy. Po wejściu będzie setowało liczbę graczy + liczbę botów.

 

2. Ok spróbuję

 

 

jaki sens ma używanie tego przy wchodzeniu gracza? wystarczy, że zrobisz mniej więcej coś takiego:

ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(instance, PacketType.Status.Server.SERVER_INFO))
{
    public void onPacketSending(PacketEvent event)
    {
        WrappedServerPing ping = (WrappedServerPing) event.getPacket().getServerPings().read(0);
        ping.setPlayersOnline(Bukkit.getOnlinePlayers().size() + 5);

        event.getPacket().getServerPings().write(0, ping);
    }
}

oczywiscie to jest przykład, a możliwości jest wiele - za każdym razem jak ktoś spinguje twój serwer, zwróci mu ilość graczy w postaci realnych graczy + 5, nie trzeba nic ustawiac przy wchodzeniu a tym bardziej w pętli

 

 

 

 

fKJeAI4.jpg

 

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

 

 

 

										 		 ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(instance, PacketType.Status.Server.SERVER_INFO){
												     public void onPacketSending(PacketEvent event)
												     {
												         WrappedServerPing ping = (WrappedServerPing) event.getPacket().getServerPings().read(0);
												         ping.setPlayersOnline(5);

												         event.getPacket().getServerPings().write(0, ping);
												     }
												 });

Jest problem :/ Użyłem tego kodu w pętli po wejściu gracza. Żeby uaktualniało się kiedy jest to potrzebne. Ta "5" jest żeby sprawdzić :;/ Bo wiem, że z tym kodem pętla byłaby bezsensowna.. Nie działa to. W onenable mam protocolmanagera zarejestrowanego..

 

Po 1. czemu w pętli, po 2. czemu po wejściu gracza? Przecież to ma się pojawiać przed wejściem gracza xD

 

Zrób to w evencie ServerListPingEvent, albo w onEnable() bo szczerze nie wiem jak to działa dokładnie.

 

Ad1 Ponieważ liczba graczy ma pokrywać się z liczbą fake graczy. Po wejściu będzie setowało liczbę graczy + liczbę botów.

 

2. Ok spróbuję

 

 

jaki sens ma używanie tego przy wchodzeniu gracza? wystarczy, że zrobisz mniej więcej coś takiego:

ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(instance, PacketType.Status.Server.SERVER_INFO))
{
    public void onPacketSending(PacketEvent event)
    {
        WrappedServerPing ping = (WrappedServerPing) event.getPacket().getServerPings().read(0);
        ping.setPlayersOnline(Bukkit.getOnlinePlayers().size() + 5);

        event.getPacket().getServerPings().write(0, ping);
    }
}

oczywiscie to jest przykład, a możliwości jest wiele - za każdym razem jak ktoś spinguje twój serwer, zwróci mu ilość graczy w postaci realnych graczy + 5, nie trzeba nic ustawiac przy wchodzeniu a tym bardziej w pętli

 

Hmm :/ Używam tego kodu i Wywala mi błąd przy bibliotekach protocolliba.. ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(instance, PacketType.Status.Server.SERVER_INFO))

Odnośnik do komentarza
Udostępnij na innych stronach

import org.bukkit.Bukkit;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;

import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.ProtocolManager;
import com.comphenix.protocol.events.PacketEvent;
import com.comphenix.protocol.wrappers.WrappedServerPing;



public class Main extends JavaPlugin implements Listener{
	static ProtocolManager protocolManager;
	public static Main instance;
	
	@Override
	public void onEnable(){
		instance = this;
		protocolManager = ProtocolLibrary.getProtocolManager();
		Bukkit.getPluginManager().registerEvents(this, this);
	}
	
	ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(instance, PacketType.Status.Server.SERVER_INFO)){
	    public void onPacketSending(PacketEvent event)
	    {
	        WrappedServerPing ping = (WrappedServerPing) event.getPacket().getServerPings().read(0);
	        ping.setPlayersOnline(Bukkit.getOnlinePlayers().size() + 5);

	        event.getPacket().getServerPings().write(0, ping);
	    }
	}
	 	 public static Main getInst(){
	 		 return instance;
	 	 }
}

Nie wiem co tu jest nie tak..

Screeny:

1. http://imgur.com/a/RutGu

2. https://scr.hu/GLX559

Odnośnik do komentarza
Udostępnij na innych stronach

import org.bukkit.Bukkit;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;

import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.ProtocolManager;
import com.comphenix.protocol.events.PacketEvent;
import com.comphenix.protocol.wrappers.WrappedServerPing;



public class Main extends JavaPlugin implements Listener{
	static ProtocolManager protocolManager;
	public static Main instance;
	
	@Override
	public void onEnable(){
		instance = this;
		protocolManager = ProtocolLibrary.getProtocolManager();
		Bukkit.getPluginManager().registerEvents(this, this);
	}
	
	ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(instance, PacketType.Status.Server.SERVER_INFO)){
	    public void onPacketSending(PacketEvent event)
	    {
	        WrappedServerPing ping = (WrappedServerPing) event.getPacket().getServerPings().read(0);
	        ping.setPlayersOnline(Bukkit.getOnlinePlayers().size() + 5);

	        event.getPacket().getServerPings().write(0, ping);
	    }
	}
	 	 public static Main getInst(){
	 		 return instance;
	 	 }
}

Nie wiem co tu jest nie tak..

Screeny:

1. http://imgur.com/a/RutGu

2. https://scr.hu/GLX559

 

No ale umieść to w metodzie xD 

import org.bukkit.Bukkit;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;

import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.ProtocolManager;
import com.comphenix.protocol.events.PacketEvent;
import com.comphenix.protocol.wrappers.WrappedServerPing;



public class Main extends JavaPlugin implements Listener{
	static ProtocolManager protocolManager;
	public static Main instance;
	
	@Override
	public void onEnable(){
		instance = this;
		protocolManager = ProtocolLibrary.getProtocolManager();
		Bukkit.getPluginManager().registerEvents(this, this);

                ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(instance, PacketType.Status.Server.SERVER_INFO)){
	   		public void onPacketSending(PacketEvent event)
	    		{
	        		WrappedServerPing ping = (WrappedServerPing) event.getPacket().getServerPings().read(0);
	        		ping.setPlayersOnline(Bukkit.getOnlinePlayers().size() + 5);

	        		event.getPacket().getServerPings().write(0, ping);
	    		}
		}
	}
	
        public static Main getInst(){
                return instance;
        }
}

Moja oficjalna strona! :)

http://socketbyte.pl/ 

Odnośnik do komentarza
Udostępnij na innych stronach

 

import org.bukkit.Bukkit;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;

import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.ProtocolManager;
import com.comphenix.protocol.events.PacketEvent;
import com.comphenix.protocol.wrappers.WrappedServerPing;



public class Main extends JavaPlugin implements Listener{
	static ProtocolManager protocolManager;
	public static Main instance;
	
	@Override
	public void onEnable(){
		instance = this;
		protocolManager = ProtocolLibrary.getProtocolManager();
		Bukkit.getPluginManager().registerEvents(this, this);
	}
	
	ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(instance, PacketType.Status.Server.SERVER_INFO)){
	    public void onPacketSending(PacketEvent event)
	    {
	        WrappedServerPing ping = (WrappedServerPing) event.getPacket().getServerPings().read(0);
	        ping.setPlayersOnline(Bukkit.getOnlinePlayers().size() + 5);

	        event.getPacket().getServerPings().write(0, ping);
	    }
	}
	 	 public static Main getInst(){
	 		 return instance;
	 	 }
}

Nie wiem co tu jest nie tak..

Screeny:

1. http://imgur.com/a/RutGu

2. https://scr.hu/GLX559

 

No ale umieść to w metodzie xD

import org.bukkit.Bukkit;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;

import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.ProtocolManager;
import com.comphenix.protocol.events.PacketEvent;
import com.comphenix.protocol.wrappers.WrappedServerPing;



public class Main extends JavaPlugin implements Listener{
	static ProtocolManager protocolManager;
	public static Main instance;
	
	@Override
	public void onEnable(){
		instance = this;
		protocolManager = ProtocolLibrary.getProtocolManager();
		Bukkit.getPluginManager().registerEvents(this, this);

                ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(instance, PacketType.Status.Server.SERVER_INFO)){
	   		public void onPacketSending(PacketEvent event)
	    		{
	        		WrappedServerPing ping = (WrappedServerPing) event.getPacket().getServerPings().read(0);
	        		ping.setPlayersOnline(Bukkit.getOnlinePlayers().size() + 5);

	        		event.getPacket().getServerPings().write(0, ping);
	    		}
		}
	}
	
        public static Main getInst(){
                return instance;
        }
}

:/ Jestem głupi >.< I dziękuję bardzo wszystkim :)

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

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

  • Ostatnio przeglądający forum EntityPlayer widoczny na tabie   0 użytkowników
    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...