Cómo hacer que un portón gire en Minecraft Bedrock, cuando los bloques no se pueden animar
Los bloques de Bedrock no se pueden mover, y la colisión de un bloque personalizado tiene que caber dentro de un bloque. Cómo los portones dobles de LLS Missing Blocks fingen las dos cosas, y los trucos de colisión que mantienen adentro a una vaca y dejan pasar a un caballo.
La puerta de valla normal tiene un bloque de ancho. Eso está bien para pasar caminando y no sirve para una granja: un tractor, una cosechadora o un caballo con carreta necesitan una abertura de dos bloques, y dos puertas de valla normales lado a lado no se abren como una sola.
Así que LLS Missing Blocks tiene un portón doble: una sola hoja que abarca dos bloques, con bisagra en un poste de la orilla, que abre todo el tramo en un arco suave. Viene en alturas de jardín, estándar y alta. Lograr que se comportara llevó más trucos que cualquier otra cosa del pack, porque Bedrock se resiste en casi cada paso.
Problema 1: los bloques no se pueden animar
Un bloque personalizado de Bedrock tiene una forma fija. Puede cambiar entre formas cuando cambia su estado, pero no se puede mover: no hay giro, solo un salto de cerrado a abierto.
La respuesta es no hacer el portón como un bloque para nada. El portón que ves es una entidad, una criatura que nunca se mueve, está parada exactamente en la cuadrícula de bloques y lleva el modelo del portón. Las criaturas sí se pueden animar, así que el giro es un arco real de 0.4 segundos.
Eso divide el portón en dos:
- La entidad es lo que ves y donde haces clic.
- Unos bloques de colisión invisibles en las dos casillas del portón son los que de verdad detienen a una vaca. El script los pone y los cambia mientras el portón se abre y se cierra.
La misma división está detrás de las puertas de granero corredizas y abatibles del mismo pack.
Problema 2: que el clic sea confiable
Lo obvio es un script que escuche cuando un jugador hace clic en el portón y lo abra. Yo fui por el otro
lado: el clic lo maneja la propia entidad. Su componente minecraft:interact lanza un evento que
cambia una propiedad open, todo en el propio JSON de la entidad, sin ningún script de por medio.
El script solo se da cuenta: cada cuatro ticks revisa si la propiedad de algún portón cambió, y entonces actualiza la colisión y reproduce el sonido. Así el portón se abre y se cierra bien aunque otra cosa cambie esa propiedad, y un script lento nunca puede perder un clic.
La parte de la animación también es simple. Las poses cerrada y abierta son cuadros clave únicos y estáticos, y un controlador de animación mezcla entre ellas. Esa mezcla es el giro.
Problema 3: 1.5 bloques de alto con bloques que llegan a 1
Una valla y una puerta de valla normales detienen a las criaturas porque su colisión mide 1.5 bloques de alto. Ese número no es arbitrario:
- Todos los animales de granja suben cualquier cosa de menos de 0.5625 bloques sin saltar. Esa es la altura de paso por defecto de Bedrock, medio bloque más un píxel.
- Las criaturas también pueden saltar más o menos un bloque. Así que nada menor a 1.5 de verdad mantiene a una adentro.
- Los camellos suben 1.5625 y pasan tranquilos por encima de las vallas normales, por eso la valla alta del pack tiene 2 bloques de colisión.
La caja de colisión de un bloque personalizado tiene que caber dentro de su propio bloque. Una pared de 1.5 de alto necesita algo más. Cada casilla del portón recibe un bloque de colisión completo a nivel del suelo, más un bloque collar de media altura en la casilla de arriba.
El collar va si se puede. Si la casilla de arriba no está vacía, por ejemplo un portón bajo un techo bajo, se omite, porque lo que esté ahí arriba ya detiene el salto. Así el portón solo necesita que su propia fila esté libre cuando lo pones.
Problema 4: un portón abierto por el que los animales no quieren pasar
La primera versión borraba los bloques de colisión cuando el portón se abría. Eso causó dos problemas.
La valla soltaba al portón. Una valla normal junto al portón se conecta con el bloque que tenga al lado, que aquí es el bloque de colisión invisible. Borrarlo al abrir hacía que el brazo de la valla se retrajera a la vista cada vez que el portón giraba, y que volviera a estirarse al cerrarse.
Así que los bloques a nivel del suelo se quedan en los dos estados, y solo cambia la forma de su colisión. Eso causó el segundo problema.
El ganado no usaba el portón abierto. Mi primera forma abierta era un poste delgado en el lado de la bisagra: todo lo demás de la casilla estaba vacío. Los jugadores pasaban bien. Las vacas no, porque la búsqueda de caminos de las criaturas de Bedrock decide si una casilla se puede cruzar por bloque, sin ver la forma que tiene dentro. Una casilla con cualquier tirita alta de colisión se lee como una pared para el camino de una criatura, por delgada que sea.
El arreglo es una placa de piso de un píxel. Cuando el portón está abierto, la colisión de cada casilla es una placa de 1/16 de bloque de alto. Sigue siendo una caja de colisión, así que la valla de al lado conserva su conexión, pero para todo lo que camina es solo piso. Los jugadores y las criaturas pasan por encima sin notarlo, y la búsqueda de caminos ve una casilla abierta.
El collar de arriba se quita al abrir: nada se conecta con él, y es la parte que detiene el salto.
Problema 5: el atajo de “aire” que no lo es
Un arreglo tentador para lo de la placa de piso es decirle a Bedrock que los bloques de colisión respiran
como aire ("minecraft:breathability": "air"). No lo hagas. Bedrock entonces trata el bloque como aire
también para moverse: los pollos y los jugadores atravesaban un portón cerrado, y las vallas de al lado
soltaban sus brazos. A los caballos, raramente, todavía los detenía. Nunca es la forma correcta de decir “no
sólido”.
Problema 6: dos portones que se abren desde el centro
Pon dos portones dobles lado a lado y quieres una abertura de cuatro bloques que se abra desde el centro, no dos hojas girando hacia el mismo lado.
El modelo tiene dos huesos de bisagra anidados. El de afuera gira sobre el poste izquierdo; el de
adentro es su hijo y gira sobre el poste derecho. Los dos en cero es cerrado, y girar cualquiera de los dos
mueve la misma hoja desde el extremo contrario. Una propiedad mirror elige cuál.
El emparejamiento se decide por posición, no por el orden en que los pones. Cuando se pone un portón, busca un vecino en línea con él, y el par se refleja para que se abran hacia afuera. Ponlos en cualquier orden y el resultado es el mismo.
Problema 7: el portón se veía demasiado brillante junto a su propia valla
Los primeros portones se veían deslavados junto a una valla real de la misma madera, y los colores no eran la causa: la paleta del portón medía un poco más oscura que la textura de los tablones.
La causa era la iluminación. Una valla es un bloque y el portón es una entidad. Minecraft sombrea las caras de los bloques según su dirección: arriba a brillo completo, los lados más oscuros, abajo más oscuro todavía. Una entidad se ilumina plana, todas las caras a brillo completo. Lado a lado, el portón era lo único de la escena sin sombreado.
Así que el sombreado está pintado en la textura del portón: las caras de arriba al 100%, los lados al 78%, las de abajo al 62%. Solo se separan arriba, lado y abajo, nunca norte contra este, porque el portón gira: una diferencia izquierda-derecha estaría bien en dos ángulos y al revés en los otros dos.
Pequeñas decisiones que importan
- Romper un portón requiere agacharse + golpe. Un golpe normal solo te lo recuerda. El portón es una entidad, y perder un portón por un golpe perdido a media pelea con un zombi sería horrible.
- La lista de maderas son datos guardados. Cada portón puesto guarda su madera como un número, que se usa para decidir qué objeto suelta cuando se rompe. Las maderas nuevas solo se agregan al final de la lista. Reordénala y cada portón de cada mundo existente suelta el objeto equivocado.
- Un generador, una lista de cubos. El modelo, la hoja de texturas, los íconos de los objetos y las recetas salen todos de un solo script, así que la textura nunca se puede desfasar del modelo.
Lo único que todavía no puede hacer
Un camino de tierra bajo un portón vuelve a ser tierra, porque Bedrock revierte un bloque de camino que tiene un bloque sólido encima, y las casillas de colisión cuentan como sólidas. Volver a poner el camino con un script después de cada cambio no aguantó en el juego. Lo siguiente que voy a probar es un bloque que se vea como camino y no tenga regla de reversión.
Pruébalo
Los portones están en LLS Missing Blocks, junto con puertas de granero, vallas de dos alturas, losas de camino y de pasto y más, y también vienen integrados en el Farm Sim Pack. Fabrica un portón doble con dos puertas de valla normales de la misma madera.
Los mods
LLS Missing Blocks
Los bloques que el juego normal nunca llegó a hacer — puertas de granero, portones por los que pasa un tractor, vallas, losas — y la lista sigue creciendo.
LLS Farm Sim Pack
Maquinaria que manejas, animales con reloj de hambre, cuatro estaciones de verdad y una granja que sigue funcionando mientras no estás.
Más del devlog
- Cinco errores de complementos de Bedrock que fallan sin dar error Un caballo invisible, patas corriendo cuatro veces más rápido, una criatura que olvidó cómo saltar y un pack de magia que se rompió sin que nadie lo tocara. Cinco errores de complementos de Minecraft Bedrock con los que me topé haciendo LLS Equestrian y el Magic Pack, y cómo atraparlos.
- Hacer que nieve en una granja de planicie: cómo fingir clima invernal en Minecraft Bedrock Bedrock no tiene clima de nieve y decide entre lluvia o nieve según el bioma. Cómo LLS Seasons arma un día nevado con niebla, una partícula y una capa de nieve propia, y el congelamiento de verano que causó una limpieza de nieve.
- Patas que se quedan en el suelo: IK de dos huesos en Molang para el Doggoyle Cómo el Doggoyle del LLS Magic Pack mantiene las patas en el suelo al paso, al trote y al galope: un reloj de zancada a partir de la velocidad en el suelo, pisadas planeadas sobre el piso, y cinemática inversa resuelta en cada cuadro en el Molang de Bedrock.