Ir para conteúdo

Tirando a AI de uma entidade


leonardosc

Posts Recomendados

Eu já vi uma porrada de gente procurando por isso, então vou deixar aqui pra quem quiser e pra mim me lembrar quando alguém perguntar.

 

 

Spigot 1.8+

public static void setAI(LivingEntity entity, boolean hasAi) {
  EntityLiving handle = ((CraftLivingEntity) entity).getHandle();
  handle.getDataWatcher().watch(15, (byte) (hasAi ? 0 : 1));
}

// Exemplo:
Location loc = null;// Localizacao
Villager villager = loc.getWorld().spawn(loc, Villager.class);
setAI(villager, false); // Tira a AI do villager.

Spigot 1.9+

 

LivingEntity#setAI

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

Só por edição de métodos. Sera que rola fazer algo que instancia a classe da entity ou copia ela e edita? (To perguntando, acho q nao é possível)

Sem tu dar override nos métodos acho que não.

 

Da pra tu usar alguma ferramente/biblioteca pra editar o bytecode... mas seria mais complicado ainda.

Link para o comentário
Compartilhar em outros sites

deve ter um jeito de fazer por Reflection na NMS, vou tentar ..

se conseguir informa \o/

 

 

Só com customentity, nós estávamos comentando disso.. Vc não é de ler as coisas pelo jeito '-'

eu li, re-li, des-li e un-li, e tendi poha nenhuma :v

Link para o comentário
Compartilhar em outros sites

Para 1.8 eu utilizo isso:

void noAI(Entity bukkitEntity) {
    net.minecraft.server.v1_8_R1.Entity nmsEntity = ((CraftEntity) bukkitEntity).getHandle();
    NBTTagCompound tag = nmsEntity.getNBTTag();
    if (tag == null) {
        tag = new NBTTagCompound();
    }
    nmsEntity.c(tag);
    tag.setInt("NoAI", 1);
    nmsEntity.f(tag);
}
Link para o comentário
Compartilhar em outros sites

 

 

Para 1.8 eu utilizo isso:

void noAI(Entity bukkitEntity) {
    net.minecraft.server.v1_8_R1.Entity nmsEntity = ((CraftEntity) bukkitEntity).getHandle();
    NBTTagCompound tag = nmsEntity.getNBTTag();
    if (tag == null) {
        tag = new NBTTagCompound();
    }
    nmsEntity.c(tag);
    tag.setInt("NoAI", 1);
    nmsEntity.f(tag);
}

 

Para q serve? Não entendo '-'

Link para o comentário
Compartilhar em outros sites

 

 

Para 1.8 eu utilizo isso:

void noAI(Entity bukkitEntity) {
    net.minecraft.server.v1_8_R1.Entity nmsEntity = ((CraftEntity) bukkitEntity).getHandle();
    NBTTagCompound tag = nmsEntity.getNBTTag();
    if (tag == null) {
        tag = new NBTTagCompound();
    }
    nmsEntity.c(tag);
    tag.setInt("NoAI", 1);
    nmsEntity.f(tag);
}

 

Dah no mesmo, ele pega do datawatcher e seta no NBT...

 

Oqq eu mostrei é pelo datawatcher...

Link para o comentário
Compartilhar em outros sites

 

Para 1.8 eu utilizo isso:

void noAI(Entity bukkitEntity) {
    net.minecraft.server.v1_8_R1.Entity nmsEntity = ((CraftEntity) bukkitEntity).getHandle();
    NBTTagCompound tag = nmsEntity.getNBTTag();
    if (tag == null) {
        tag = new NBTTagCompound();
    }
    nmsEntity.c(tag);
    tag.setInt("NoAI", 1);
    nmsEntity.f(tag);
}

Se eu usar esse método, ele remove a AI dele e assim ele não consegue se movimentar ou fazer interações?

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