Ir para conteúdo
  • 0

[Ajuda] Ao clicar em uma entidade + Ao bater em uma entidade


VictorHeaven

Pergunta

Olá guys,


Queria saber como que:


1. Ao clicar com botão direito em uma entidade (villager) com X nome, acontecer algo


 


2. Ao bater em uma entidade (villager) com X item (espada) ecom X nome, matar a entidade (villager)


 


Caso esteja se perguntando: "Esses cara não pesquisa" e tals...


 


Eu já pesquisei muito e não encontrei, obrigado a quem for das os exemplos.


Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

1 - Utilize o evento PlayerInteractAtEntityEvent

2 - Utilize o evento EntityDamageByEntityEvent

 

Se não conseguiu, olhe os exemplos:

    @EventHandler
    public void onClickNPC(PlayerInteractAtEntityEvent e) {
    	Entity et = e.getRightClicked();
    	if(et != null && et instanceof Villager && et.getName() != null && et.getName().equalsIgnoreCase("Aderbal")) {
    		e.getPlayer().sendMessage("O SAM É BRABO");
    	}
    }
    
    @EventHandler
    public void onDamageNPC(EntityDamageByEntityEvent e) {
    	Entity et = e.getEntity();
    	if(e.getDamager() instanceof Player) {
    		if(et instanceof Villager) {
    			Player dmg =(Player)e.getDamager();
    			ItemStack item = dmg.getItemInHand();
    			if(item != null &&  item.getType().equals(Material.STONE_SWORD) && item.getItemMeta() != null && item.getItemMeta().getDisplayName() != null && item.getItemMeta().getDisplayName().equalsIgnoreCase("HIT KILL")){
    			et.remove();
             }
          }
    	}
    }

Ah, não testei.

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

1 - Utilize o evento PlayerInteractAtEntityEvent

2 - Utilize o evento EntityDamageByEntityEvent

 

Se não conseguiu, olhe os exemplos:

    @EventHandler
    public void onClickNPC(PlayerInteractAtEntityEvent e) {
    	Entity et = e.getRightClicked();
    	if(et != null && et instanceof Villager && et.getName() != null && et.getName().equalsIgnoreCase("Aderbal")) {
    		e.getPlayer().sendMessage("O SAM É BRABO");
    	}
    }
    
    @EventHandler
    public void onDamageNPC(EntityDamageByEntityEvent e) {
    	Entity et = e.getEntity();
    	if(e.getDamager() instanceof Player) {
    		if(et instanceof Villager) {
    			Player dmg =(Player)e.getDamager();
    			ItemStack item = dmg.getItemInHand();
    			if(item != null &&  item.getType().equals(Material.STONE_SWORD) && item.getItemMeta() != null && item.getItemMeta().getDisplayName() != null && item.getItemMeta().getDisplayName().equalsIgnoreCase("HIT KILL"));
    			Bukkit.getWorld(et.getWorld().getName()).getEntities().remove(et);
    		}
    	}
    }

Ah, não testei.

 

Então... deu certo e não deu

 

1.

@EventHandler
	public void aoClicarNoNpc(PlayerInteractAtEntityEvent e) {
		Player p = e.getPlayer();
		if (e.getRightClicked() != null) {
			if (e.getRightClicked() instanceof Villager) {
				if (e.getRightClicked().getName() != null) {
					if (e.getRightClicked().getName()
							.equalsIgnoreCase(getConfig().getString("Npc.Nome").replaceAll("&", "§"))) {
						e.setCancelled(true);
						p.openInventory(invPrincipal(p));
					}
				}
			}
		}
	}

Tentei isso e está funcionando com "defeito", ele consegue executar o que tem no método "invPrincipal" mais não abre a GUI, abre o negócio de trocar com aldeão

e no caso 2.

ele não mata o villager

 

eu uso esse método para não conseguirem matar ele de nenhuma forma

@EventHandler
	public void aoTentarBater(EntityDamageEvent e) {
		if (e.getEntity() instanceof Villager) {
			if (e.getEntity().getName() != null) {
				if (e.getEntity().getName().equalsIgnoreCase(getConfig().getString("Npc.Nome").replaceAll("&", "§"))) {
					e.setCancelled(true);
				}
			}
		}
	}

mais quando bato com a espada com o código q você mandou, não funciona e da erro no console

 

erro:

[23:31:48 ERROR]: Could not pass event EntityDamageByEntityEvent to vBancoCentral v1.0
org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:310) ~[spigot-1.8.8-R0.1-SNAPSHOT.jar:git-Spigot-21fe707-e1ebe52]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot-1.8.8-R0.1-SNAPSHOT.jar:git-Spigot-21fe707-e1ebe52]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [spigot-1.8.8-R0.1-SNAPSHOT.jar:git-Spigot-21fe707-e1ebe52]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487) [spigot-1.8.8-R0.1-SNAPSHOT.jar:git-Spigot-21fe707-e1ebe52]
        at org.bukkit.craftbukkit.v1_8_R3.event.CraftEventFactory.callEvent(CraftEventFactory.java:87) [spigot-1.8.8-R0.1-SNAPSHOT.jar:git-Spigot-21fe707-e1ebe52]
        at org.bukkit.craftbukkit.v1_8_R3.event.CraftEventFactory.callEntityDamageEvent(CraftEventFactory.java:553) [spigot-1.8.8-R0.1-SNAPSHOT.jar:git-Spigot-21fe707-e1ebe52]
        at org.bukkit.craftbukkit.v1_8_R3.event.CraftEventFactory.handleEntityDamageEvent(CraftEventFactory.java:466) [spigot-1.8.8-R0.1-SNAPSHOT.jar:git-Spigot-21fe707-e1ebe52]
        at org.bukkit.craftbukkit.v1_8_R3.event.CraftEventFactory.handleLivingEntityDamageEvent(CraftEventFactory.java:585) [spigot-1.8.8-R0.1-SNAPSHOT.jar:git-Spigot-21fe707-e1ebe52]
        at net.minecraft.server.v1_8_R3.EntityLiving.d(EntityLiving.java:1102) [spigot-1.8.8-R0.1-SNAPSHOT.jar:git-Spigot-21fe707-e1ebe52]
        at net.minecraft.server.v1_8_R3.EntityLiving.damageEntity(EntityLiving.java:743) [spigot-1.8.8-R0.1-SNAPSHOT.jar:git-Spigot-21fe707-e1ebe52]
        at net.minecraft.server.v1_8_R3.EntityHuman.attack(EntityHuman.java:1001) [spigot-1.8.8-R0.1-SNAPSHOT.jar:git-Spigot-21fe707-e1ebe52]
        at net.minecraft.server.v1_8_R3.EntityPlayer.attack(EntityPlayer.java:1063) [spigot-1.8.8-R0.1-SNAPSHOT.jar:git-Spigot-21fe707-e1ebe52]
        at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:1355) [spigot-1.8.8-R0.1-SNAPSHOT.jar:git-Spigot-21fe707-e1ebe52]
        at net.minecraft.server.v1_8_R3.PacketPlayInUseEntity.a(SourceFile:52) [spigot-1.8.8-R0.1-SNAPSHOT.jar:git-Spigot-21fe707-e1ebe52]
        at net.minecraft.server.v1_8_R3.PacketPlayInUseEntity.a(SourceFile:11) [spigot-1.8.8-R0.1-SNAPSHOT.jar:git-Spigot-21fe707-e1ebe52]
        at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:13) [spigot-1.8.8-R0.1-SNAPSHOT.jar:git-Spigot-21fe707-e1ebe52]
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_131]
        at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_131]
        at net.minecraft.server.v1_8_R3.SystemUtils.a(SourceFile:44) [spigot-1.8.8-R0.1-SNAPSHOT.jar:git-Spigot-21fe707-e1ebe52]
        at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:715) [spigot-1.8.8-R0.1-SNAPSHOT.jar:git-Spigot-21fe707-e1ebe52]
        at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374) [spigot-1.8.8-R0.1-SNAPSHOT.jar:git-Spigot-21fe707-e1ebe52]
        at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [spigot-1.8.8-R0.1-SNAPSHOT.jar:git-Spigot-21fe707-e1ebe52]
        at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [spigot-1.8.8-R0.1-SNAPSHOT.jar:git-Spigot-21fe707-e1ebe52]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_131]
Caused by: java.lang.ClassCastException: org.bukkit.craftbukkit.v1_8_R3.entity.CraftVillager cannot be cast to javax.persistence.Entity
        at me.victor696.bancocentral.Main.aoBaterNPc(Main.java:122) ~[?:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_131]
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_131]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_131]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_131]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot-1.8.8-R0.1-SNAPSHOT.jar:git-Spigot-21fe707-e1ebe52]
        ... 23 more
Link para o comentário
Compartilhar em outros sites

Estava meio errado mesmo, não prestei atenção.

tente:

    @EventHandler
    public void onC(PlayerInteractEntityEvent e) {
        Entity et = e.getRightClicked();
        if (et != null
                && et instanceof Villager  && et.getName() != null && et.getName().equalsIgnoreCase("Aderbal") ) {
            e.getPlayer().sendMessage("O SAM É BRABO");
            e.setCancelled(true);
        }
    }

    @EventHandler
    public void onDamageNPC(EntityDamageByEntityEvent e) {
        Entity et = e.getEntity();
        if (e.getDamager() instanceof Player) {
            if (et instanceof Villager) {
                Player dmg = (Player) e.getDamager();
                ItemStack item = dmg.getItemInHand();
                if (item != null && item.getType().equals(Material.STONE_SWORD) && item.getItemMeta() != null
                        && item.getItemMeta().getDisplayName() != null
                        && item.getItemMeta().getDisplayName().equalsIgnoreCase("HIT KILL")) {
                    et.remove();
                }
            }
        }
    }

Cuidado pra não importar a classe errada dnv :v

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

Eu já não te disse?

Membro Alertado Art. 9

 

 É proibido free-post.

logo-forum.png

 

 

Sua dúvida foi marcada como [Resolvido] e movido à área de dúvidas resolvidas.

 

 

Atenciosamente,

Gamer's Board

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...