Ir para conteúdo

Comando "/fake" em servidores 1.7/1.8 [ProtocolHack]


_Kurimatzu_

Posts Recomendados

	public static void setFake(Player p , String name){
		if(fake.containsKey(p)){
			fake.remove(p);
		}
		fake.put(p, name);
		PacketPlayOutEntityDestroy destroy = new PacketPlayOutEntityDestroy(new int[] { p.getEntityId() });
		PacketPlayOutNamedEntitySpawn spawn = new PacketPlayOutNamedEntitySpawn(((CraftPlayer)p).getHandle());
		try {
			ReflectionUtils.setValue(spawn, true, "b", new GameProfile(p.getUniqueId(), name));
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchFieldException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SecurityException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		p.setPlayerListName(name);
		p.setCustomName(name);
		p.setDisplayName(name);
		p.setCustomNameVisible(true);

		for(Player online : Bukkit.getOnlinePlayers()){
			if(p != online){
				((CraftPlayer)online).getHandle().playerConnection.sendPacket(destroy);
			}
			if(hasNewProtocol(online)){
				try {
					ProtocolLibrary.getProtocolManager().sendServerPacket(online, addAndRemoveToTabList(p, false));
				} catch (InvocationTargetException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(p != online){
				((CraftPlayer)online).getHandle().playerConnection.sendPacket(spawn);
			}
		}
	}
	public static boolean hasNewProtocol(Player p){
		return ((CraftPlayer)p).getHandle().playerConnection.networkManager.getVersion() == 47;
	}

Oquê impossibilitava os jogadores da 1.8, não visualizar o /fake, era a falta desse método:

public static PacketContainer addAndRemoveToTabList(Player p , boolean removeOrAdd){
		/*
		 * 0 = Ação
		 * 1 = GameProfile
		 * 2 = GameMode
		 * 3 = PING
		 * 4 = NOME
		 */
		int action = (removeOrAdd ? 4 : 0);
		if(action == 0){
			PacketContainer addAndRemove = ProtocolLibrary.getProtocolManager().createPacket(PacketType.Play.Server.PLAYER_INFO);
			addAndRemove.getModifier().write(0, action);
			addAndRemove.getModifier().write(1, new GameProfile(p.getUniqueId(), Fake.fake.get(p)));
			addAndRemove.getModifier().write(2, p.getGameMode().getValue());
			addAndRemove.getModifier().write(3, 0);
			addAndRemove.getModifier().write(4, Fake.fake.get(p));
			return addAndRemove;
		} else {
			/*
			 * Remove
			 */
			PacketContainer addAndRemove = ProtocolLibrary.getProtocolManager().createPacket(PacketType.Play.Server.PLAYER_INFO);
			addAndRemove.getModifier().write(0, action);
			addAndRemove.getModifier().write(1, new GameProfile(p.getUniqueId(), Fake.fake.get(p)));
			addAndRemove.getModifier().write(2, p.getGameMode().getValue());
			addAndRemove.getModifier().write(3, 0);
			addAndRemove.getModifier().write(4, Fake.fake.get(p));
			return addAndRemove;
		}
	}

Agora todos podem usar o /fake :)

Depende do Protocolib.

ReflectionUtils: https://github.com/NavidK0/Carbon/blob/master/src/main/java/com/lastabyss/carbon/utils/particlelib/ReflectionUtils.java

 

Oquê falta:

 

- Salvar os fakes, e reenviar na hora que um jogador entra (quando entra, aparece o jogador sem o fake)

- Scoreboards, TabComplete, etc.

Editado por _Kurimatzu_
Link para o comentário
Compartilhar em outros sites

e essa "fake" vem de onde ?

@EDIT

 

é uma HashMap ?, se sim qual os tipos ?

@EDIT²

Ta dando erro Nessa parte

 

public static boolean hasNewProtocol(Player p){
		return ( ((CraftPlayer)p).getHandle().playerConnection.networkManager).getVersion() == 47;
	}
	

Erro:

 

The method getVersion() is undefined for the type NetworkManager
Editado por Cuthmf
Link para o comentário
Compartilhar em outros sites

 

e essa "fake" vem de onde ?

 

@EDIT

 

é uma HashMap ?, se sim qual os tipos ?

 

@EDIT²

 

Ta dando erro Nessa parte

 

 

public static boolean hasNewProtocol(Player p){
		return ( ((CraftPlayer)p).getHandle().playerConnection.networkManager).getVersion() == 47;
	}
	

Erro:

 

 

The method getVersion() is undefined for the type NetworkManager

Está usando 1.7/1.8 ProtocolHack?

Link para o comentário
Compartilhar em outros sites

Falta MUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUITA coisa pra ser um real sistema de Fake...

 

 

Falta MUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUITA coisa pra ser um real sistema de Fake...

 

Sim, scoreboard, comandos, tab-complete, chat, etc.

 

Só é uma base.

Link para o comentário
Compartilhar em outros sites

Participe da Conversa

Você pode postar agora e se cadastrar mais tarde. Se você tiver uma conta, a class='ipsType_brandedLink' href='https://gamersboard.com.br/login/' data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-title='Sign In Now'>acesse agora para postar com sua conta.
Observação: sua postagem exigirá aprovação do moderador antes de ficar visível.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.

Processando...
×
×
  • Criar Novo...