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

  Em 02/05/2017 em 23:17, -DimaBR disse:

que? n entendi

ali em cima do

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

coloca

if (x == loc.getBlockX() &&== loc.getBlockY() &&== 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
  Em 02/05/2017 em 07:53, zAth disse:

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

  Em 02/05/2017 em 13:48, -DimaBR disse:

 

 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
  Em 02/05/2017 em 18:23, zAth disse:

 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

 

 

  Em 02/05/2017 em 18:32, Dery disse:
@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

  Em 02/05/2017 em 21:57, -DimaBR disse:
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
  Em 02/05/2017 em 22:00, zAth disse:

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

  Em 02/05/2017 em 22:06, -DimaBR disse:

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
  Em 02/05/2017 em 22:15, zAth disse:

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

  Em 02/05/2017 em 22:18, -DimaBR disse:
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
  Em 02/05/2017 em 22:30, zAth disse:

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

  Em 02/05/2017 em 22:18, -DimaBR disse:

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
  Em 02/05/2017 em 22:36, leonardosc disse:

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

  Em 02/05/2017 em 22:47, -DimaBR disse:

 

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
  Em 02/05/2017 em 23:10, leonardosc disse:

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
  Em 02/05/2017 em 23:21, leonardosc disse:

 

ali em cima do

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

coloca

if (x == loc.getBlockX() &&== loc.getBlockY() &&== 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

  Em 02/05/2017 em 23:31, -DimaBR disse:

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
  Em 02/05/2017 em 23:39, leonardosc disse:

 

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