Ir para conteúdo
  • 0

RADIUS JAVA


Guest iDimaDev

Pergunta

Guest iDimaDev

Como verifico se tem uma pedra em uma radius de 10 blocos da pedra que o player colocou no chão no java? alguem sabe? Obrigado a você que entrou no tópico pra ajudar :)

Link para o comentário
Compartilhar em outros sites

24 respostass a esta questão

Posts Recomendados

que? n entendi

ali em cima do

if (loc.getWorld().getBlockAt(x, y, z).getType() == Material.STONE) {

coloca

if (x == loc.getBlockX() && y == loc.getBlockY() && z == loc.getBlockZ()) continue;
Link para o comentário
Compartilhar em outros sites

for(int x = e.getBlock().getLocation().getBlockX() - 10; x <= e.getBlock().getLocation().getBlockX() + 10; x++){

////for(int y = e.getBlock().getLocation().getBlockY() - 10; y <= e.getBlock().getLocation().getBlockY() + 10; y++){

////////for(int z = e.getBlock().getLocation().getBlockZ() - 10; z <= e.getBlock().getLocation().getBlockZ() + 10; z++){

////////////Location location = new Location(e.getBlock().getLocation().getWorld(), x, y, z);

////////////if(location.getWorld().getBlockAt(location).getType() == Material.STONE){}

////////}

////}

}

Link para o comentário
Compartilhar em outros sites

Guest iDimaDev

for(int x = e.getBlock().getLocation().getBlockX() - 10; x <= e.getBlock().getLocation().getBlockX() + 10; x++){

////for(int y = e.getBlock().getLocation().getBlockY() - 10; y <= e.getBlock().getLocation().getBlockY() + 10; y++){

////////for(int z = e.getBlock().getLocation().getBlockZ() - 10; z <= e.getBlock().getLocation().getBlockZ() + 10; z++){

////////////Location location = new Location(e.getBlock().getLocation().getWorld(), x, y, z);

////////////if(location.getWorld().getBlockAt(location).getType() == Material.STONE){}

////////}

////}

}

Deu 2 erros, 1 erro: http://i.imgur.com/wnBIoKG.png

 

2 erro: http://i.imgur.com/YmAhT9J.png

Link para o comentário
Compartilhar em outros sites

 

 Além que importou errado, recomendo verificar se o bloco colocado é uma pedra. (Se eu entendi certo o que você quer fazer)

 

Apague o import DocumentatioTool.location e depois importe denovo, de certeza que irá aparecer uma lista com várias opções, escolha a que começa com org.bukkit

Link para o comentário
Compartilhar em outros sites

@EventHandler

public void placeStone(BlockPlaceEvent e){

Block b = e.getBlock();

Location loc = b.getLocation();

if(b.getType().equals(Material.STONE){

for(int x = loc.getX()-10; x<=loc.getX()+10; x++){

for(int y = (loc.getY()-10 < 0 ? 1 : loc.getY()-10); x<=loc.getY()+10; x++){

for(int x = loc.getY()-10; x<=loc.getY()+10; x++){

Block block = loc.getWorld().getBlockAt(x, y, z);

// Faz o que quiser com o block

}

}

}

}

Link para o comentário
Compartilhar em outros sites

Guest iDimaDev

 Além que importou errado, recomendo verificar se o bloco colocado é uma pedra. (Se eu entendi certo o que você quer fazer)

 

Apague o import DocumentatioTool.location e depois importe denovo, de certeza que irá aparecer uma lista com várias opções, escolha a que começa com org.bukkit

Oque eu ja importei: http://i.imgur.com/kKnscke.png

 

 

@EventHandler
public void placeStone(BlockPlaceEvent e){
    Block b = e.getBlock();
    Location loc = b.getLocation();
    if(b.getType().equals(Material.STONE){
        for(int x = loc.getX()-10; x<=loc.getX()+10; x++){
            for(int y = (loc.getY()-10 < 0 ? 1 : loc.getY()-10); x<=loc.getY()+10; x++){ 
                for(int x = loc.getY()-10; x<=loc.getY()+10; x++){
                    Block block = loc.getWorld().getBlockAt(x, y, z);
                    // Faz o que quiser com o block
                }
            }
        }
    }
} 

Ta com erros: 

 

http://i.imgur.com/UqqsIEv.png

 

o resto dos erros ta assim: http://i.imgur.com/NGM0vg6.png

 

@Edit vou tentar um negócio e ver se resolve

 

 

@Edit2 

 

Funcionou sem os erros, mas ele está cancelando qualquer bloco que é posto e não só pedra....

 

@EventHandler
    public void onColocar(BlockPlaceEvent e){
    for(int x = e.getBlock().getLocation().getBlockX() - 10; x <= e.getBlock().getLocation().getBlockX() + 10; x++){
    for(int y = e.getBlock().getLocation().getBlockY() - 10; y <= e.getBlock().getLocation().getBlockY() + 10; y++){
    for(int z = e.getBlock().getLocation().getBlockZ() - 10; z <= e.getBlock().getLocation().getBlockZ() + 10; z++){
    Location location = new Location(e.getBlock().getLocation().getWorld(), x, y, z);
    if(location.getWorld().getBlockAt(location).getType() == Material.STONE){}
    e.setCancelled(true);
    }
    }
   
         }
 
 
Editado por iDimaDev
Link para o comentário
Compartilhar em outros sites

Oque eu ja importei: http://i.imgur.com/kKnscke.png

 

 

 

Ta com erros: 

 

http://i.imgur.com/UqqsIEv.png

 

o resto dos erros ta assim: http://i.imgur.com/NGM0vg6.png

 

@Edit vou tentar um negócio e ver se resolve

 

Importou tudo menos o certo, como eu já falei......... APAGA o import DocumentationTool.location

Link para o comentário
Compartilhar em outros sites

Guest iDimaDev

Importou tudo menos o certo, como eu já falei......... APAGA o import DocumentationTool.location

Ja resolvi o erro, agora ta certo, ja resolvi até a parte de nao poder colocar todos os blocos, agora ta chechando só a pedra(stone), mas msm assim, sem nenhuma stone por perto ele cancela, queria fazer ele cancelar se houver outra stone em radius de 5 em volta do bloco que ele colocou, o codigo ta certo agr so falta por pra verificar se tem alguma pedra na radius

Link para o comentário
Compartilhar em outros sites

Ja resolvi o erro, agora ta certo, ja resolvi até a parte de nao poder colocar todos os blocos, agora ta chechando só a pedra(stone), mas msm assim, sem nenhuma stone por perto ele cancela, queria fazer ele cancelar se houver outra stone em radius de 5 em volta do bloco que ele colocou, o codigo ta certo agr so falta por pra verificar se tem alguma pedra na radius

if(e.getBlock().getType() == Material.STONE){

//código que lhe passei inicialmente

}

 

@edit

Vi agora o seu edit, olha lá o e.setCancelled(true).. Você colocou fora dos {}, na linha acima tem 2 chaves sem nada dentro.

 

Se eu tivesse no pc lhe explicava melhor..

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

Guest iDimaDev

if(e.getBlock().getType() == Material.STONE){

//código que lhe passei inicialmente

}

mas entao, tipo dai ele n consegue botar nenhuma pedra '-' tipo tem que botar uma pedra, ai se botar outra pedra em radius 5 em volta da pedra colocada, vai mandar uma mensagem e cancelar o evento saco? mas como faço verificar que pode colocar uma pedra e dps se tiver colocando uma pedra em 5 de radius em volta dessa pedra cancelar?

Link para o comentário
Compartilhar em outros sites

mas entao, tipo dai ele n consegue botar nenhuma pedra '-' tipo tem que botar uma pedra, ai se botar outra pedra em radius 5 em volta da pedra colocada, vai mandar uma mensagem e cancelar o evento saco? mas como faço verificar que pode colocar uma pedra e dps se tiver colocando uma pedra em 5 de radius em volta dessa pedra cancelar?

Vai conseguir sim, porque você só cancela o evento se estiver uma pedra, se não estiver ele não cancela.. Para isso você só tem que colocar o e.setCancelled(true) dentro das chavetas.. Ou então apaga aquelas chavetas sem nada dentro, tb vai resultar.

Link para o comentário
Compartilhar em outros sites

Guest iDimaDev

Vai conseguir sim, porque você só cancela o evento se estiver uma pedra, se não estiver ele não cancela.. Para isso você só tem que colocar o e.setCancelled(true) dentro das chavetas.. Ou então apaga aquelas chavetas sem nada dentro, tb vai resultar.

Cara eu to testando e quando eu boto qualquer pedra ele cancela, ele n bota a pedra e dps se botar outra perto ele cancela, ele cancela msm nem nenhuma pedra por perto, http://i.imgur.com/TM8Wmf2.png

 

o codigo é este...

Link para o comentário
Compartilhar em outros sites

mas entao, tipo dai ele n consegue botar nenhuma pedra '-' tipo tem que botar uma pedra, ai se botar outra pedra em radius 5 em volta da pedra colocada, vai mandar uma mensagem e cancelar o evento saco? mas como faço verificar que pode colocar uma pedra e dps se tiver colocando uma pedra em 5 de radius em volta dessa pedra cancelar?

 

Usa o meu exemplo, é exatamente o que vc precisa, só mudar o Material.SPONGE pra Material.STONE e colocar e.setCancelled(true)

Link para o comentário
Compartilhar em outros sites

Guest iDimaDev

Usa o meu exemplo, é exatamente o que vc precisa, só mudar o Material.SPONGE pra Material.STONE e colocar e.setCancelled(true)

Eu testei o seu codigo:

 

    @EventHandler
    public void onColocar(BlockPlaceEvent e){
    Player p = (Player) e.getPlayer();
    int radius = 5;
    Location loc = e.getBlock().getLocation();
 
    int x1 = loc.getBlockX() - radius;
    int z1 = loc.getBlockZ() - radius;
    int y1 = loc.getBlockY() - radius;
 
    int x2 = loc.getBlockX() + radius;
    int z2 = loc.getBlockZ() + radius;
    int y2 = loc.getBlockY() + radius;
       
    int startX = Math.min(x1, x2);
    int startY = Math.min(y1, y2);
    int startZ = Math.min(z1, z2);
 
    int endX = Math.max(x1, x2);
    int endY = Math.max(y1, y2);
    int endZ = Math.max(z1, z2);
       
    for (int x = startX; x <= endX; x++) {
     for (int y = startY; y <= endY; y++) {
       for (int z = startZ; z <= endZ; z++) {
         if (loc.getWorld().getBlockAt(x, y, z).getType() == Material.STONE) {
           p.sendMessage("§bNao pode colocar Pedras, neste local!");
           e.setCancelled(true);
         }
       }
     }
    }
    }
 
Tipo, eu quero que de para botar uma pedra e dps que botar ele verifica se nessa pedra em volta do radius tem alguma pedra, se tiver ele cancela, se n ele bota a pedra, mas aqui ta cancelando sem nenhuma pedra em volta ;-;
 
Link para o comentário
Compartilhar em outros sites

 

Eu testei o seu codigo:

 

    @EventHandler
    public void onColocar(BlockPlaceEvent e){
    Player p = (Player) e.getPlayer();
    int radius = 5;
    Location loc = e.getBlock().getLocation();
 
    int x1 = loc.getBlockX() - radius;
    int z1 = loc.getBlockZ() - radius;
    int y1 = loc.getBlockY() - radius;
 
    int x2 = loc.getBlockX() + radius;
    int z2 = loc.getBlockZ() + radius;
    int y2 = loc.getBlockY() + radius;
       
    int startX = Math.min(x1, x2);
    int startY = Math.min(y1, y2);
    int startZ = Math.min(z1, z2);
 
    int endX = Math.max(x1, x2);
    int endY = Math.max(y1, y2);
    int endZ = Math.max(z1, z2);
       
    for (int x = startX; x <= endX; x++) {
     for (int y = startY; y <= endY; y++) {
       for (int z = startZ; z <= endZ; z++) {
         if (loc.getWorld().getBlockAt(x, y, z).getType() == Material.STONE) {
           p.sendMessage("§bNao pode colocar Pedras, neste local!");
           e.setCancelled(true);
         }
       }
     }
    }
    }
 
Tipo, eu quero que de para botar uma pedra e dps que botar ele verifica se nessa pedra em volta do radius tem alguma pedra, se tiver ele cancela, se n ele bota a pedra, mas aqui ta cancelando sem nenhuma pedra em volta ;-;
 

 

 

Verifica se o x,y,z é igual o x,y,z do e.getBlock() pq o getBlockAt(x, y, z) retorna o bloco mesmo se ele n tiver sido colocado ainda 

Link para o comentário
Compartilhar em outros sites

Guest iDimaDev

Verifica se o x,y,z é igual o x,y,z do e.getBlock() pq o getBlockAt(x, y, z) retorna o bloco mesmo se ele n tiver sido colocado ainda 

que? n entendi

Link para o comentário
Compartilhar em outros sites

Guest iDimaDev

 

ali em cima do

if (loc.getWorld().getBlockAt(x, y, z).getType() == Material.STONE) {

coloca

if (x == loc.getBlockX() && y == loc.getBlockY() && z == loc.getBlockZ()) continue;

Resolvido obrigado <3 s2 resolvido para você <3

Link para o comentário
Compartilhar em outros sites

Guest iDimaDev

Ei mais uma coisa, eu nao consigo botar blocos perto da pedra, tem como resolver isso? tipo só não deixar colocar outra pedra em volta?

 

Esquece resolvido!

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

Ei mais uma coisa, eu nao consigo botar blocos perto da pedra, tem como resolver isso? tipo só não deixar colocar outra pedra em volta?

 

Esquece resolvido!

 

Só verificar o tipo do bloco...

 

   @EventHandler
    public void onColocar(BlockPlaceEvent e){
      if (e.getBlock().getType() != Material.STONE) {
        return
      }
     .....
Link para o comentário
Compartilhar em outros sites

Guest iDimaDev

 

Só verificar o tipo do bloco...

 

   @EventHandler
    public void onColocar(BlockPlaceEvent e){
      if (e.getBlock().getType() != Material.STONE) {
        return
      }
     .....

 

Sim eu sei eu ja consegui, kkkk eu perguntei ai eu fui la e tentei umas ganbiarra e funfo ja fiz até config hu3

 

Alguma dica doque eu posso por no plugin?

 

http://i.imgur.com/86SNjAS.png

Link para o comentário
Compartilhar em outros sites

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