Ir para conteúdo

FakeSignWindow - Abra a janela da placa em qualquer lugar!


Dery

Posts Recomendados

Olá, hoje venho trazer mais uma source para vocês, mais especificamente um método. Este, como o próprio título sugere, irá permitir você abrir a janela da placa em qualquer lugar, sem a necessidade de clicar em uma placa!

 

Código:

 

 

public void openSign(Player p) {
	String version = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3];
	
	Location loc = p.getLocation().clone();
	loc.setY(0);
	loc.getBlock().setType(Material.WALL_SIGN);
	Sign s = (Sign) loc.getBlock().getState();

	try {
		Class<?> craftPlayer = Class.forName("org.bukkit.craftbukkit." + version + ".entity.CraftPlayer");
		Method getHandle = craftPlayer.getDeclaredMethod("getHandle");
		
		Object entityPlayer = getHandle.invoke(p);
		Object playerConnection = entityPlayer.getClass().getDeclaredField("playerConnection").get(entityPlayer);
		
		Method sendPacket = playerConnection.getClass().getDeclaredMethod("sendPacket", Class.forName("net.minecraft.server." + version + ".Packet"));
		
		Class<?> packetPlayOutOpenSignEditor = Class.forName("net.minecraft.server." + version + ".PacketPlayOutOpenSignEditor");
		Class<?> blockPosition = Class.forName("net.minecraft.server." + version + ".BlockPosition");
		
		Constructor<?> position = blockPosition.getConstructor(double.class, double.class, double.class);
		Object packet = packetPlayOutOpenSignEditor.getConstructor(blockPosition)
				.newInstance(position.newInstance(loc.getX(), loc.getY(), loc.getZ()));
		
		Field field = s.getClass().getDeclaredField("sign");
		field.setAccessible(true);
		
		Object tileEntity = field.get(s);
		
		tileEntity.getClass().getDeclaredField("isEditable").set(tileEntity, true);
		
		Field owner = tileEntity.getClass().getDeclaredField(version.startsWith("v1_7") ? "k" : "h");
		owner.setAccessible(true);
		owner.set(tileEntity, entityPlayer);
		
		sendPacket.invoke(playerConnection, packet);
	} catch (ClassNotFoundException | NoSuchMethodException | NoSuchFieldException | SecurityException | 
			IllegalArgumentException | IllegalAccessException | InvocationTargetException | InstantiationException e1) {
		e1.printStackTrace();
	}
	
	loc.getBlock().setType(Material.BED_BLOCK);
} 

 

 

 

OBS.: Este código só funciona a partir da 1.7 em diante!

 

Para usar o método, basta colocá-lo em alguma classe sua e chamá-lo!

Exemplo:

 

 

public class Utils {

	String version = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3];

	public void openSign(Player p) {
		Location loc = p.getLocation().clone();
		loc.setY(0);
		loc.getBlock().setType(Material.WALL_SIGN);
		Sign s = (Sign) loc.getBlock().getState();

		try {
			Class<?> craftPlayer = Class.forName("org.bukkit.craftbukkit." + version + ".entity.CraftPlayer");
			Method getHandle = craftPlayer.getDeclaredMethod("getHandle");
			
			Object entityPlayer = getHandle.invoke(p);
			Object playerConnection = entityPlayer.getClass().getDeclaredField("playerConnection").get(entityPlayer);
			
			Method sendPacket = playerConnection.getClass().getDeclaredMethod("sendPacket", Class.forName("net.minecraft.server." + version + ".Packet"));
			
			Class<?> packetPlayOutOpenSignEditor = Class.forName("net.minecraft.server." + version + ".PacketPlayOutOpenSignEditor");
			Class<?> blockPosition = Class.forName("net.minecraft.server." + version + ".BlockPosition");
			
			Constructor<?> position = blockPosition.getConstructor(double.class, double.class, double.class);
			Object packet = packetPlayOutOpenSignEditor.getConstructor(blockPosition)
					.newInstance(position.newInstance(loc.getX(), loc.getY(), loc.getZ()));
			
			Field field = s.getClass().getDeclaredField("sign");
			field.setAccessible(true);
			
			Object tileEntity = field.get(s);
			
			tileEntity.getClass().getDeclaredField("isEditable").set(tileEntity, true);
			
			Field owner = tileEntity.getClass().getDeclaredField(version.startsWith("v1_7") ? "k" : "h");
			owner.setAccessible(true);
			owner.set(tileEntity, entityPlayer);
			
			sendPacket.invoke(playerConnection, packet);
		} catch (ClassNotFoundException | NoSuchMethodException | NoSuchFieldException | SecurityException | 
				IllegalArgumentException | IllegalAccessException | InvocationTargetException | InstantiationException e1) {
			e1.printStackTrace();
		}
		
		loc.getBlock().setType(Material.BED_BLOCK);
	}

} 

 

 

 

Para saber o que foi digitado pelo usuário, você pode usar o evento "SignChangeEvent" normalmente.

Para saber se o player do SignChangeEvent é um player com uma FakeSign, vocês vão ter que pensar bem pouco para descobrir como faz :)

 

DICA.: Coloque a variável "version" fora do método e tente melhorá-lo de acordo com sua classe!

Link para o comentário
Compartilhar em outros sites

Olá, hoje venho trazer mais uma source para vocês, mais especificamente um método. Este, como o próprio título sugere, irá permitir você abrir a janela da placa em qualquer lugar, sem a necessidade de clicar em uma placa!

 

Código:

 

 

public void openSign(Player p) {
	String version = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3];
	
	Location loc = p.getLocation().clone();
	loc.setY(0);
	loc.getBlock().setType(Material.WALL_SIGN);
	Sign s = (Sign) loc.getBlock().getState();

	try {
		Class<?> craftPlayer = Class.forName("org.bukkit.craftbukkit." + version + ".entity.CraftPlayer");
		Method getHandle = craftPlayer.getDeclaredMethod("getHandle");
		
		Object entityPlayer = getHandle.invoke(p);
		Object playerConnection = entityPlayer.getClass().getDeclaredField("playerConnection").get(entityPlayer);
		
		Method sendPacket = playerConnection.getClass().getDeclaredMethod("sendPacket", Class.forName("net.minecraft.server." + version + ".Packet"));
		
		Class<?> packetPlayOutOpenSignEditor = Class.forName("net.minecraft.server." + version + ".PacketPlayOutOpenSignEditor");
		Class<?> blockPosition = Class.forName("net.minecraft.server." + version + ".BlockPosition");
		
		Constructor<?> position = blockPosition.getConstructor(double.class, double.class, double.class);
		Object packet = packetPlayOutOpenSignEditor.getConstructor(blockPosition)
				.newInstance(position.newInstance(loc.getX(), loc.getY(), loc.getZ()));
		
		Field field = s.getClass().getDeclaredField("sign");
		field.setAccessible(true);
		
		Object tileEntity = field.get(s);
		
		tileEntity.getClass().getDeclaredField("isEditable").set(tileEntity, true);
		
		Field owner = tileEntity.getClass().getDeclaredField(version.startsWith("v1_7") ? "k" : "h");
		owner.setAccessible(true);
		owner.set(tileEntity, entityPlayer);
		
		sendPacket.invoke(playerConnection, packet);
	} catch (ClassNotFoundException | NoSuchMethodException | NoSuchFieldException | SecurityException | 
			IllegalArgumentException | IllegalAccessException | InvocationTargetException | InstantiationException e1) {
		e1.printStackTrace();
	}
	
	loc.getBlock().setType(Material.BED_BLOCK);
} 

 

 

 

OBS.: Este código só funciona a partir da 1.7 em diante!

 

Para usar o método, basta colocá-lo em alguma classe sua e chamá-lo!

Exemplo:

 

 

public class Utils {

	String version = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3];

	public void openSign(Player p) {
		Location loc = p.getLocation().clone();
		loc.setY(0);
		loc.getBlock().setType(Material.WALL_SIGN);
		Sign s = (Sign) loc.getBlock().getState();

		try {
			Class<?> craftPlayer = Class.forName("org.bukkit.craftbukkit." + version + ".entity.CraftPlayer");
			Method getHandle = craftPlayer.getDeclaredMethod("getHandle");
			
			Object entityPlayer = getHandle.invoke(p);
			Object playerConnection = entityPlayer.getClass().getDeclaredField("playerConnection").get(entityPlayer);
			
			Method sendPacket = playerConnection.getClass().getDeclaredMethod("sendPacket", Class.forName("net.minecraft.server." + version + ".Packet"));
			
			Class<?> packetPlayOutOpenSignEditor = Class.forName("net.minecraft.server." + version + ".PacketPlayOutOpenSignEditor");
			Class<?> blockPosition = Class.forName("net.minecraft.server." + version + ".BlockPosition");
			
			Constructor<?> position = blockPosition.getConstructor(double.class, double.class, double.class);
			Object packet = packetPlayOutOpenSignEditor.getConstructor(blockPosition)
					.newInstance(position.newInstance(loc.getX(), loc.getY(), loc.getZ()));
			
			Field field = s.getClass().getDeclaredField("sign");
			field.setAccessible(true);
			
			Object tileEntity = field.get(s);
			
			tileEntity.getClass().getDeclaredField("isEditable").set(tileEntity, true);
			
			Field owner = tileEntity.getClass().getDeclaredField(version.startsWith("v1_7") ? "k" : "h");
			owner.setAccessible(true);
			owner.set(tileEntity, entityPlayer);
			
			sendPacket.invoke(playerConnection, packet);
		} catch (ClassNotFoundException | NoSuchMethodException | NoSuchFieldException | SecurityException | 
				IllegalArgumentException | IllegalAccessException | InvocationTargetException | InstantiationException e1) {
			e1.printStackTrace();
		}
		
		loc.getBlock().setType(Material.BED_BLOCK);
	}

} 

 

 

 

Para saber o que foi digitado pelo usuário, você pode usar o evento "SignChangeEvent" normalmente.

Para saber se o player do SignChangeEvent é um player com uma FakeSign, vocês vão ter que pensar bem pouco para descobrir como faz :)

 

DICA.: Coloque a variável "version" fora do método e tente melhorá-lo de acordo com sua classe!

 

Eu já tinha visto esses sistema de placas fakes em algum plugin acho que era o KingMarket ñ lembro... eu acho ele legal mas ruim ao mesmo tempo :( eu acho que aquele sistema de bigornas fakes é melhor tipo, /f convidar ai abre uma bigorna e no lugar lá onde você renomeia você coloca o nome do player ia ficar top.

 

Parabéns pelo código! Embora eu prefiro as bigornas fakes achei isso muito impressionante parabéns!

Link para o comentário
Compartilhar em outros sites

Olá, hoje venho trazer mais uma source para vocês, mais especificamente um método. Este, como o próprio título sugere, irá permitir você abrir a janela da placa em qualquer lugar, sem a necessidade de clicar em uma placa!

 

Código:

 

 

public void openSign(Player p) {
	String version = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3];
	
	Location loc = p.getLocation().clone();
	loc.setY(0);
	loc.getBlock().setType(Material.WALL_SIGN);
	Sign s = (Sign) loc.getBlock().getState();

	try {
		Class<?> craftPlayer = Class.forName("org.bukkit.craftbukkit." + version + ".entity.CraftPlayer");
		Method getHandle = craftPlayer.getDeclaredMethod("getHandle");
		
		Object entityPlayer = getHandle.invoke(p);
		Object playerConnection = entityPlayer.getClass().getDeclaredField("playerConnection").get(entityPlayer);
		
		Method sendPacket = playerConnection.getClass().getDeclaredMethod("sendPacket", Class.forName("net.minecraft.server." + version + ".Packet"));
		
		Class<?> packetPlayOutOpenSignEditor = Class.forName("net.minecraft.server." + version + ".PacketPlayOutOpenSignEditor");
		Class<?> blockPosition = Class.forName("net.minecraft.server." + version + ".BlockPosition");
		
		Constructor<?> position = blockPosition.getConstructor(double.class, double.class, double.class);
		Object packet = packetPlayOutOpenSignEditor.getConstructor(blockPosition)
				.newInstance(position.newInstance(loc.getX(), loc.getY(), loc.getZ()));
		
		Field field = s.getClass().getDeclaredField("sign");
		field.setAccessible(true);
		
		Object tileEntity = field.get(s);
		
		tileEntity.getClass().getDeclaredField("isEditable").set(tileEntity, true);
		
		Field owner = tileEntity.getClass().getDeclaredField(version.startsWith("v1_7") ? "k" : "h");
		owner.setAccessible(true);
		owner.set(tileEntity, entityPlayer);
		
		sendPacket.invoke(playerConnection, packet);
	} catch (ClassNotFoundException | NoSuchMethodException | NoSuchFieldException | SecurityException | 
			IllegalArgumentException | IllegalAccessException | InvocationTargetException | InstantiationException e1) {
		e1.printStackTrace();
	}
	
	loc.getBlock().setType(Material.BED_BLOCK);
} 

 

 

 

OBS.: Este código só funciona a partir da 1.7 em diante!

 

Para usar o método, basta colocá-lo em alguma classe sua e chamá-lo!

Exemplo:

 

 

public class Utils {

	String version = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3];

	public void openSign(Player p) {
		Location loc = p.getLocation().clone();
		loc.setY(0);
		loc.getBlock().setType(Material.WALL_SIGN);
		Sign s = (Sign) loc.getBlock().getState();

		try {
			Class<?> craftPlayer = Class.forName("org.bukkit.craftbukkit." + version + ".entity.CraftPlayer");
			Method getHandle = craftPlayer.getDeclaredMethod("getHandle");
			
			Object entityPlayer = getHandle.invoke(p);
			Object playerConnection = entityPlayer.getClass().getDeclaredField("playerConnection").get(entityPlayer);
			
			Method sendPacket = playerConnection.getClass().getDeclaredMethod("sendPacket", Class.forName("net.minecraft.server." + version + ".Packet"));
			
			Class<?> packetPlayOutOpenSignEditor = Class.forName("net.minecraft.server." + version + ".PacketPlayOutOpenSignEditor");
			Class<?> blockPosition = Class.forName("net.minecraft.server." + version + ".BlockPosition");
			
			Constructor<?> position = blockPosition.getConstructor(double.class, double.class, double.class);
			Object packet = packetPlayOutOpenSignEditor.getConstructor(blockPosition)
					.newInstance(position.newInstance(loc.getX(), loc.getY(), loc.getZ()));
			
			Field field = s.getClass().getDeclaredField("sign");
			field.setAccessible(true);
			
			Object tileEntity = field.get(s);
			
			tileEntity.getClass().getDeclaredField("isEditable").set(tileEntity, true);
			
			Field owner = tileEntity.getClass().getDeclaredField(version.startsWith("v1_7") ? "k" : "h");
			owner.setAccessible(true);
			owner.set(tileEntity, entityPlayer);
			
			sendPacket.invoke(playerConnection, packet);
		} catch (ClassNotFoundException | NoSuchMethodException | NoSuchFieldException | SecurityException | 
				IllegalArgumentException | IllegalAccessException | InvocationTargetException | InstantiationException e1) {
			e1.printStackTrace();
		}
		
		loc.getBlock().setType(Material.BED_BLOCK);
	}

} 

 

 

 

Para saber o que foi digitado pelo usuário, você pode usar o evento "SignChangeEvent" normalmente.

Para saber se o player do SignChangeEvent é um player com uma FakeSign, vocês vão ter que pensar bem pouco para descobrir como faz :)

 

DICA.: Coloque a variável "version" fora do método e tente melhorá-lo de acordo com sua classe!

 

Olá, hoje venho trazer mais uma source para vocês, mais especificamente um método. Este, como o próprio título sugere, irá permitir você abrir a janela da placa em qualquer lugar, sem a necessidade de clicar em uma placa!

 

Código:

 

 

public void openSign(Player p) {
	String version = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3];
	
	Location loc = p.getLocation().clone();
	loc.setY(0);
	loc.getBlock().setType(Material.WALL_SIGN);
	Sign s = (Sign) loc.getBlock().getState();

	try {
		Class<?> craftPlayer = Class.forName("org.bukkit.craftbukkit." + version + ".entity.CraftPlayer");
		Method getHandle = craftPlayer.getDeclaredMethod("getHandle");
		
		Object entityPlayer = getHandle.invoke(p);
		Object playerConnection = entityPlayer.getClass().getDeclaredField("playerConnection").get(entityPlayer);
		
		Method sendPacket = playerConnection.getClass().getDeclaredMethod("sendPacket", Class.forName("net.minecraft.server." + version + ".Packet"));
		
		Class<?> packetPlayOutOpenSignEditor = Class.forName("net.minecraft.server." + version + ".PacketPlayOutOpenSignEditor");
		Class<?> blockPosition = Class.forName("net.minecraft.server." + version + ".BlockPosition");
		
		Constructor<?> position = blockPosition.getConstructor(double.class, double.class, double.class);
		Object packet = packetPlayOutOpenSignEditor.getConstructor(blockPosition)
				.newInstance(position.newInstance(loc.getX(), loc.getY(), loc.getZ()));
		
		Field field = s.getClass().getDeclaredField("sign");
		field.setAccessible(true);
		
		Object tileEntity = field.get(s);
		
		tileEntity.getClass().getDeclaredField("isEditable").set(tileEntity, true);
		
		Field owner = tileEntity.getClass().getDeclaredField(version.startsWith("v1_7") ? "k" : "h");
		owner.setAccessible(true);
		owner.set(tileEntity, entityPlayer);
		
		sendPacket.invoke(playerConnection, packet);
	} catch (ClassNotFoundException | NoSuchMethodException | NoSuchFieldException | SecurityException | 
			IllegalArgumentException | IllegalAccessException | InvocationTargetException | InstantiationException e1) {
		e1.printStackTrace();
	}
	
	loc.getBlock().setType(Material.BED_BLOCK);
} 

 

 

 

OBS.: Este código só funciona a partir da 1.7 em diante!

 

Para usar o método, basta colocá-lo em alguma classe sua e chamá-lo!

Exemplo:

 

 

public class Utils {

	String version = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3];

	public void openSign(Player p) {
		Location loc = p.getLocation().clone();
		loc.setY(0);
		loc.getBlock().setType(Material.WALL_SIGN);
		Sign s = (Sign) loc.getBlock().getState();

		try {
			Class<?> craftPlayer = Class.forName("org.bukkit.craftbukkit." + version + ".entity.CraftPlayer");
			Method getHandle = craftPlayer.getDeclaredMethod("getHandle");
			
			Object entityPlayer = getHandle.invoke(p);
			Object playerConnection = entityPlayer.getClass().getDeclaredField("playerConnection").get(entityPlayer);
			
			Method sendPacket = playerConnection.getClass().getDeclaredMethod("sendPacket", Class.forName("net.minecraft.server." + version + ".Packet"));
			
			Class<?> packetPlayOutOpenSignEditor = Class.forName("net.minecraft.server." + version + ".PacketPlayOutOpenSignEditor");
			Class<?> blockPosition = Class.forName("net.minecraft.server." + version + ".BlockPosition");
			
			Constructor<?> position = blockPosition.getConstructor(double.class, double.class, double.class);
			Object packet = packetPlayOutOpenSignEditor.getConstructor(blockPosition)
					.newInstance(position.newInstance(loc.getX(), loc.getY(), loc.getZ()));
			
			Field field = s.getClass().getDeclaredField("sign");
			field.setAccessible(true);
			
			Object tileEntity = field.get(s);
			
			tileEntity.getClass().getDeclaredField("isEditable").set(tileEntity, true);
			
			Field owner = tileEntity.getClass().getDeclaredField(version.startsWith("v1_7") ? "k" : "h");
			owner.setAccessible(true);
			owner.set(tileEntity, entityPlayer);
			
			sendPacket.invoke(playerConnection, packet);
		} catch (ClassNotFoundException | NoSuchMethodException | NoSuchFieldException | SecurityException | 
				IllegalArgumentException | IllegalAccessException | InvocationTargetException | InstantiationException e1) {
			e1.printStackTrace();
		}
		
		loc.getBlock().setType(Material.BED_BLOCK);
	}

} 

 

 

 

Para saber o que foi digitado pelo usuário, você pode usar o evento "SignChangeEvent" normalmente.

Para saber se o player do SignChangeEvent é um player com uma FakeSign, vocês vão ter que pensar bem pouco para descobrir como faz :)

 

DICA.: Coloque a variável "version" fora do método e tente melhorá-lo de acordo com sua classe!

Legal, esses dias queria um sistema desses. Se puder faz também de bigorna fake, como o Rush falou...

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...