CayendoArena

Quien soy
Aina Martin
@ainamartin
Autor y referencias

Algunos bloques de Minecraft se ven afectados por la gravedad de forma predeterminada, como grava, arena, arena roja, yunques y huevos de dragón. Todos estos bloques comparten la misma estructura básica para lidiar con su gravedad. Existen y han existido muchos fallos con este tipo de bloques, sobre todo los duplicadores de arena y los cambiadores de metadatos. Actualmente, los generadores de arena son, en su mayor parte, fijos. Los generadores se han fabricado utilizando solo pistones, pero los últimos diseños utilizan TNT para impulsar las entidades FallingSand a través de un portal final.



Contenido

  • Usos de 1
  • 2 generadores de arena
  • 3 cambiadores de metadatos
  • 4 El código

Utiliza materiales de

Al usar las entidades FallingSand, puede usarlo para varias tareas como paredes invisibles o simplemente mover un bloque visualmente. Las entidades de FallingSand se pueden cambiar usando sus datos NBT que pueden cambiar el aspecto del bloque a algo como en el video de SimplySarcs: https://www.youtube.com/watch?v=5M6lkQtNTwk

Generadores de arena

  • Duplicación FallingBlock usando portales finales - https://www.youtube.com/watch?v=7m2G1QeV-nQ
  • Generador de arena súper rápido - https://www.youtube.com/watch?v=QEvTBxEJWMw
  • Cambiador de metadatos de arena - https://www.youtube.com/watch?v=ulh6-HvscTo

Cambiadores de metadatos

Cuando se crea una entidad FallingSand, el bloque y la entidad coexisten por un corto tiempo. En este momento, se puede insertar otro bloque, que luego cambia sus metadatos. Consulte el código comentado para obtener una mejor explicación.

El código

Cada vez que un BlockFalling recibe una actualización de bloque, verifica el bloque debajo de él para determinar si se le permite caer o no.


Si se permite que el bloque caiga, convoca una entidad FalingSand en el medio exacto de sí mismo, con los mismos datos que él mismo.


La entidad FallingBlock se actualiza con cada tick, y el código es bastante interesante, lo que permite tanto los cambiadores de metadatos como posiblemente los duplicadores de arena.

Teoría de errores ---------- Se crea la entidad. La entidad y el bloque coexisten hasta el siguiente tick. Una vez que se ha creado la entidad, el bloque se inserta en ella. Se empuja el bloque de arena original. La entidad se actualiza un tic más tarde y elimina el bloque de arena. Luego procede a caer y establece el bloque como su propio color. Error de bloque invisible ----------- FallingSand invocado dentro de otro bloque hace que el bloque desaparezca. También puede convertir arena. Generadores de arena --------------- Para 1 tick, el bloque de arena y la entidad coexisten. Solíamos poder usar TNT para empujar FallingSand a un portal. Pseudocódigo ---------- BlockFalling-> Actualización: Si canFallDown: SummonEntityFallingBlock (mundo, posX + 0.5, posY + 0.5, posZ + 0.5, BlockState (currentPosition)); SummonEntityFallingBlock (world, posX, posY, posZ, blockState): // Más como el estado del bloque original. this.blockState = blockState; this.preventEntitySpawning = true; this.setSize (0.98, 0.98); this.setPosition (posX, posY, posZ); this.motionX = this.motionY = this.motionZ = 0; this.prevPosX = posX; this.prevPosY = posY; this.prevPosZ = posZ; this.fallTime = 0; // Método llamado a cada tick. EntityFallingBlock-> Actualización: block currentBlock = this.currentPosition.getBlock (); // Si actualmente está en el aire, la entidad muere. // Probablemente se trate de una comprobación de seguridad de algún tipo. Si se elimina el bloque original, // la entidad no debe seguir cayendo, porque eso podría resultar en una eliminación de bloqueos / duplicados. if currentBlock.getMaterial () == Material.air: this.setDead (); else: this.prevPosX = this.posX; this.prevPosY = this.posY; this.prevPosZ = this.posZ; // fallTime == 0 es cuando la entidad aún no ha comenzado a caer. // La entidad aún no cae si es empujada por un pistón y luego se deja caer. if this.fallTime == 0: blockPos = new BlockPos (esto); // Si FallingSand no ha comenzado a caer, y actualmente se encuentra dentro del bloque original, // ese bloque se elimina. Esto significa que FallingSand y el bloque original coexistían. // Desafortunadamente, la antigua comprobación fallTime solía establecerse en 1 tick. Ahora, los generadores de arena // han sido reparados y probablemente sea imposible recuperar el bloque original o la entidad. if this.world.getBlockState (blockPos) .getBlock () == currentBlock: this.setBlockToAir (blockPos); // Si no hay ningún bloque para eliminar, se elimina la propia entidad FallingSand. // Esta fue la solución inicial para los generadores de arena. else: this.setDead (); else: this.fallTime + = 1; this.motionY - = 0.04; this.moveEntity (this.motionX, this.motionY, this.motionZ); this.motionX * = 0.98; this.motionY * = 0.98; this.motionZ * = 0.98; blockPos = new BlockPos (esto); // Creo que cualquier colisión dispara verticalmente this.onGround, por lo que estar dentro del cuadro delimitador es suficiente para que se active. // No creo que la parte inferior deba estar dentro del bloque, cualquier parte debería funcionar. if this.onGround: // Asegura que FallingSand pueda ser empujado por pistones. if this.world.getBlockState (blockPos)! = Blocks.pistonExtension: this.setDead (); // El juego aquí coloca el bloque en la posición del FallingBlock para que sea un bloque // con el estado del bloque original. La entidad FallingSand solo verifica el tipo // del bloque, y no es necesario que el estado del bloque coincida. Esto permite // el cambio de metadatos de FallingBlocks. // 1 - Se crea la entidad. La entidad y el bloque coexisten hasta el siguiente tick. // 2 - Una vez creada la entidad, el bloque se inserta en ella con un tic cero. // 3 - Un tic más tarde, la entidad se actualiza. La entidad elimina el bloque de arena original. // Luego procede a caer y establece el bloque con su propio color, habiendo eliminado // el bloque de arena con los metadatos incorrectos.


Añade un comentario de CayendoArena
¡Comentario enviado con éxito! Lo revisaremos en las próximas horas.