Como fazer uma porteira girar no Minecraft Bedrock, quando blocos não podem ser animados
Os blocos do Bedrock não se mexem, e a colisão de um bloco personalizado precisa caber dentro de um bloco. Como as porteiras duplas do LLS Missing Blocks fingem as duas coisas, e os truques de colisão que seguram uma vaca e deixam um cavalo passar.
O portão normal tem um bloco de largura. Isso serve para passar a pé e não serve para uma fazenda: um trator, uma colheitadeira ou um cavalo com carroça precisam de uma abertura de dois blocos, e dois portões normais lado a lado não abrem como um só.
Então o LLS Missing Blocks tem uma porteira dupla: uma folha só cobrindo dois blocos, com dobradiça num poste da ponta, abrindo o vão inteiro num arco suave. Ela vem nas alturas de jardim, padrão e alta. Fazer ela se comportar exigiu mais gambiarras do que qualquer outra coisa do pacote, porque o Bedrock resiste em quase todo passo.
Problema 1: blocos não podem ser animados
Um bloco personalizado do Bedrock tem um formato fixo. Ele pode trocar de formato quando o estado muda, mas não pode se mexer: não tem giro, só um pulo de fechado para aberto.
A resposta é não fazer a porteira como bloco. A porteira que você vê é uma entidade, uma criatura que nunca se mexe, fica parada exatamente na grade de blocos e carrega o modelo da porteira. Criaturas podem ser animadas, então o giro é um arco de verdade de 0,4 segundo.
Isso divide a porteira em duas:
- A entidade é o que você vê e onde você clica.
- Blocos de colisão invisíveis nas duas casas da porteira são o que realmente segura uma vaca. O script coloca e muda eles enquanto a porteira abre e fecha.
A mesma divisão está por trás das portas de celeiro de correr e de abrir do mesmo pacote.
Problema 2: deixando o clique confiável
O jeito óbvio é um script que escuta um jogador clicando na porteira e abre ela. Eu fui pelo outro lado: o
clique é tratado pela própria entidade. O componente minecraft:interact dela dispara um evento que
inverte uma propriedade open, tudo no próprio JSON da entidade, sem script nenhum no meio.
O script só percebe: a cada quatro ticks ele confere se a propriedade de alguma porteira mudou, e aí atualiza a colisão e toca o som. Então a porteira continua abrindo e fechando certo se qualquer outra coisa inverter essa propriedade, e um script lento nunca consegue perder um clique.
A parte da animação também é simples. As poses fechada e aberta são quadros-chave únicos e parados, e um controlador de animação mistura entre elas. Essa mistura é o giro.
Problema 3: 1,5 bloco de altura com blocos que param em 1
Uma cerca e um portão normais seguram criaturas porque a colisão deles tem 1,5 bloco de altura. Esse número não é à toa:
- Todo animal de fazenda sobe qualquer coisa abaixo de 0,5625 bloco sem pular. Essa é a altura de passo padrão do Bedrock, meio bloco mais um pixel.
- As criaturas também conseguem pular mais ou menos um bloco. Então nada menor que 1,5 segura uma de verdade.
- Camelos sobem 1,5625 e passam tranquilos por cima de cercas normais, e é por isso que a cerca alta do pacote tem 2 blocos de colisão.
A caixa de colisão de um bloco personalizado precisa caber dentro do próprio bloco. Uma parede de 1,5 de altura precisa de mais alguma coisa. Cada casa da porteira ganha um bloco de colisão inteiro no nível do chão, mais um bloco colar de meia altura na casa de cima.
O colar vai se der. Se a casa de cima não estiver vazia, por exemplo uma porteira embaixo de um teto baixo, ele é pulado, porque o que estiver lá em cima já segura o pulo. Assim a porteira só precisa que a própria fileira esteja livre quando você coloca.
Problema 4: uma porteira aberta por onde os animais se recusam a passar
A primeira versão apagava os blocos de colisão quando a porteira abria. Isso causou dois problemas.
A cerca largava a porteira. Uma cerca normal do lado da porteira se liga ao bloco que estiver ao lado, que aqui é o bloco de colisão invisível. Apagar ele ao abrir fazia o braço da cerca recolher visivelmente toda vez que a porteira girava, e esticar de novo quando ela fechava.
Então os blocos no nível do chão ficam nos dois estados, e só o formato da colisão deles muda. Isso causou o segundo problema.
O rebanho não usava a porteira aberta. Meu primeiro formato aberto era um poste fino na ponta da dobradiça: todo o resto da casa ficava vazio. Os jogadores passavam normal. As vacas não, porque a busca de caminho das criaturas do Bedrock decide se uma casa é passável por bloco, sem olhar o formato dentro dela. Uma casa com qualquer tirinha alta de colisão vira parede para o caminho de uma criatura, por mais fina que seja.
A correção é uma placa de chão de um pixel. Quando a porteira está aberta, a colisão de cada casa é uma placa de 1/16 de bloco de altura. Ela continua sendo uma caixa de colisão, então a cerca do lado mantém a ligação, mas para tudo o que anda é só chão. Jogadores e criaturas passam por cima sem perceber, e a busca de caminho vê uma casa aberta.
O colar de cima é tirado ao abrir: nada se liga a ele, e ele é a parte que segura o pulo.
Problema 5: o atalho do “ar” que não é atalho
Uma correção tentadora para o caso da placa de chão é dizer ao Bedrock que os blocos de colisão respiram
como ar ("minecraft:breathability": "air"). Não faça isso. O Bedrock passa a tratar o bloco como ar também
para movimento: galinhas e jogadores atravessavam uma porteira fechada, e as cercas do lado largavam os
braços. Os cavalos, estranhamente, continuavam sendo segurados. Nunca é o jeito certo de dizer “não sólido”.
Problema 6: duas porteiras que abrem pelo meio
Coloque duas porteiras duplas lado a lado e você quer uma abertura de quatro blocos que abre pelo meio, não duas folhas girando para o mesmo lado.
O modelo tem dois ossos de dobradiça aninhados. O de fora gira no poste esquerdo; o de dentro é filho
dele e gira no poste direito. Os dois em zero é fechado, e girar qualquer um deles mexe a mesma folha a
partir da ponta oposta. Uma propriedade mirror escolhe qual.
O pareamento é decidido pela posição, não pela ordem em que você coloca. Quando uma porteira é colocada, ela procura um vizinho alinhado com ela, e o par se espelha para abrir para fora. Coloque em qualquer ordem e o resultado é o mesmo.
Problema 7: a porteira parecia clara demais do lado da própria cerca
As primeiras porteiras pareciam desbotadas do lado de uma cerca de verdade da mesma madeira, e as cores não eram a causa: a paleta da porteira media um pouco mais escura que a textura das tábuas.
A causa era a iluminação. Uma cerca é um bloco e a porteira é uma entidade. O Minecraft sombreia as faces dos blocos pela direção: em cima no brilho total, os lados mais escuros, embaixo mais escuro ainda. Uma entidade é iluminada por igual, toda face no brilho total. Lado a lado, a porteira era a única coisa da cena sem sombra.
Então o sombreamento está pintado na textura da porteira: faces de cima a 100%, lados a 78%, faces de baixo a 62%. Só cima, lado e baixo são separados, nunca norte contra leste, porque a porteira gira: uma diferença de esquerda e direita ficaria certa em dois ângulos e invertida nos outros dois.
Pequenas decisões que importam
- Quebrar uma porteira exige agachar + bater. Uma batida normal só lembra você. A porteira é uma entidade, e perder uma porteira por um golpe perdido no meio de uma luta com um zumbi seria horrível.
- A lista de madeiras é dado salvo. Cada porteira colocada guarda a madeira como um número, usado para decidir qual item cai quando ela quebra. Madeiras novas só são adicionadas no fim da lista. Reordene e toda porteira de todo mundo existente solta o item errado.
- Um gerador, uma lista de cubos. O modelo, a folha de texturas, os ícones dos itens e as receitas saem todos de um script só, então a textura nunca fica desalinhada do modelo.
A única coisa que ela ainda não consegue
Um caminho de terra embaixo de uma porteira volta a ser terra, porque o Bedrock reverte um bloco de caminho que tem um bloco sólido em cima, e as casas de colisão contam como sólidas. Colocar o caminho de volta com um script depois de cada mudança não segurou no jogo. A próxima coisa a tentar é um bloco que pareça caminho e não tenha regra de reversão.
Experimente
As porteiras estão no LLS Missing Blocks, junto com portas de celeiro, cercas em duas alturas, lajes de caminho e de grama e mais, e também vêm embutidas no Farm Sim Pack. Fabrique uma porteira dupla com dois portões normais da mesma madeira.
Os mods
LLS Missing Blocks
Os blocos que o jogo normal nunca chegou a fazer — portas de celeiro, porteiras por onde passa um trator, cercas, lajes — e a lista continua crescendo.
LLS Farm Sim Pack
Máquinas que você dirige, animais com relógio de fome, quatro estações de verdade e uma fazenda que continua funcionando enquanto você está longe.
Mais do devlog
- Cinco bugs de complementos do Bedrock que falham sem dar erro Um cavalo invisível, pernas correndo quatro vezes rápido demais, uma criatura que esqueceu como pular e um pacote de magia que quebrou sem ninguém mexer. Cinco bugs de complementos do Minecraft Bedrock que encontrei fazendo o LLS Equestrian e o Magic Pack, e como pegar cada um.
- Fazendo nevar numa fazenda de planície: fingindo clima de inverno no Minecraft Bedrock O Bedrock não tem clima de neve e decide entre chuva e neve pelo bioma. Como o LLS Seasons monta um dia de neve com neblina, uma partícula e uma camada de neve própria, e o congelamento de verão que uma varredura de neve causou.
- Patas que ficam plantadas: IK de dois ossos em Molang para o Doggoyle Como o Doggoyle do LLS Magic Pack mantém as patas no chão a passo, a trote e a galope: um relógio de passada a partir da velocidade no chão, pisadas planejadas no piso, e cinemática inversa resolvida em todo quadro no Molang do Bedrock.