Ir para conteúdo

Como calcular o valor das coordenadas a partir do número da chunk?


RUSHyoutuber

Posts Recomendados

É para isso que o "getBlock" da classe existe. Por exemplo, se caso você fazer "getBlock(0, y, 0)", ele vai te retorna o primeiro da chunk.

source: https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Chunk.html#getBlock-int-int-int-.

 

?????????? véi isso ai não tem nada haver '-' se eu colocar isso vai retorna o bloco mas como eu vou pegar a localização do bloco não faz o minimo sentido essa parada ai

Link para o comentário
Compartilhar em outros sites

?????????? véi isso ai não tem nada haver '-' se eu colocar isso vai retorna o bloco mas como eu vou pegar a localização do bloco não faz o minimo sentido essa parada ai

Não entendi... o "getBlock" vai retornar um objeto do tipo "Block", é só você usar o método "getLocation" da classe.

Link para o comentário
Compartilhar em outros sites

Olá pessoal! Eu tenho uma chunk (x,z) gostaria que bloco inicia ou que bloco termina aquela chunk por exemplo, quais as coordenadas da chunk 10,4... alias tem como calcular isso? de forma precisa?

player.getLocation().getChunk().getBlock(x,y,z);

X = 0 a 15

Y = 0 a 127

Z = 0 a 15

Link para o comentário
Compartilhar em outros sites

Não entendi... o "getBlock" vai retornar um objeto do tipo "Block", é só você usar o método "getLocation" da classe.

 

getBlock vai retornar o bloco daquelas coordenadas ai '-' 

 

a unica informação que eu tenho é as cordenadas da chunk 10, 20

 

se eu fizer getBlock (10,0,20) vai retornar o bloco que ta no x:10 y:0 z:20 '-'

player.getLocation().getChunk().getBlock(x,y,z);

X = 0 a 15

Y = 0 a 127

Z = 0 a 15

 

 

vou testar... não da pegar acima de 127? '-' 127 é a camada do céu se eu não me engano mas sei la loco

Link para o comentário
Compartilhar em outros sites

 

 

getBlock vai retornar o bloco daquelas coordenadas ai '-' 

 

a unica informação que eu tenho é as cordenadas da chunk 10, 20

 

se eu fizer getBlock (10,0,20) vai retornar o bloco que ta no x:10 y:0 z:20 '-'


 

vou testar... não da pegar acima de 127? '-' 127 é a camada do céu se eu não me engano mas sei la loco

 

 

se eu fizer getBlock (10,0,20) vai retornar o bloco que ta no x:10 y:0 z:20 '-' 

 

Não tem como fazer isso... você pelo menos testou, ou pelo menos viu a API? o "getBlock" da classe vai retornar apenas o bloco dentro da chunk.

Link para o comentário
Compartilhar em outros sites

Pra pegar a CHUNK do player, sem dar o getChunk:

chunk x = (player x >> 4);

chunk z = (player z >> 4);

 

pra fazer o inverso, é só usar chunk x * 16; chunk z * 16,

o valor acima vai pegar o bloco 0,0 da chunk, é só somar 0-15 para pegar os outros...

 

Isso é bastante útil para sistema de proteção baseado em chunks, ou otimizados...

 

Por exemplo, tem 10 mil áreas protegidas no servidor, e você quer otimizar isso (Não quer que cada coisa que o jogador faça, executa um for em 10 mil proteções);

 

Então você cria uma mega grande chunk (Kappa)

MegaGrandeChunk x = player x >> 11;

MegaGrandeChunk z = player z >> 11;

 

ai quando for criar uma proteção, verifica em qual MegaGrandeChunk a proteção está (Se estiver em mais de uma, coloque em todas que estiver)

 

Ai quando o player fazer uma ação:

 

BlockBreakEvent(e) -> Location loc = e.getBlock().getLocation();

x = loc x >> 11;

z = loc x >> 11;

MegaGrandeChunk mgc = MegaGrandeChunkService.getBy(x, z);

 

for(Protecaco protecao : mgc.getProtecoes()) {
   if(protecao.isInArea(loc) {

      protecao.canBreakBlock(e.getPlayer())

      ....

  }

}

 

Dá de usar para várias outras coisas, como por exemplo, meu sistema de plot

Link para o comentário
Compartilhar em outros sites

Pra pegar a CHUNK do player, sem dar o getChunk:

chunk x = (player x >> 4);

chunk z = (player z >> 4);

 

pra fazer o inverso, é só usar chunk x * 16; chunk z * 16,

o valor acima vai pegar o bloco 0,0 da chunk, é só somar 0-15 para pegar os outros...

 

Isso é bastante útil para sistema de proteção baseado em chunks, ou otimizados...

 

Por exemplo, tem 10 mil áreas protegidas no servidor, e você quer otimizar isso (Não quer que cada coisa que o jogador faça, executa um for em 10 mil proteções);

 

Então você cria uma mega grande chunk (Kappa)

MegaGrandeChunk x = player x >> 11;

MegaGrandeChunk z = player z >> 11;

 

ai quando for criar uma proteção, verifica em qual MegaGrandeChunk a proteção está (Se estiver em mais de uma, coloque em todas que estiver)

 

Ai quando o player fazer uma ação:

 

BlockBreakEvent(e) -> Location loc = e.getBlock().getLocation();

x = loc x >> 11;

z = loc x >> 11;

MegaGrandeChunk mgc = MegaGrandeChunkService.getBy(x, z);

 

for(Protecaco protecao : mgc.getProtecoes()) {

   if(protecao.isInArea(loc) {

      protecao.canBreakBlock(e.getPlayer())

      ....

  }

}

 

Dá de usar para várias outras coisas, como por exemplo, meu sistema de plot

Muito obrigado pela explicação! 

 

Podem fechar o tópico! RESOLVIDO!

Link para o comentário
Compartilhar em outros sites

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