Cooking

ADD-ON | DEVELOPMENT / TRAILER / KEYART | 2025

Developed and created the marketing for an Add-On that adds custom cooking appliances and foods

THE PROBLEM

Minecraft blocks don't support complex animations, and entities at the time didn't support solid physics

THE SOLUTION

Place a "dummy" block to handle player collision, then spawn the entity

When a player places a cooking appliance, the game spawns an invisible custom block, which allows for collisions. This block then summons the corresponding appliance entity to the world.

One appliance, the oven, is special because it takes up multiple blocks. Depending on the player's rotation, the game checks the corresponding blocks to see if they're all air.

As of the update 1.21.70, entities gained the ability to become collidable with the "minecraft:is_collidable" component.

Despite this useful feature, I chose to maintain the dummy block system for two reasons:

  • The size of an entity collision box is based on the "minecraft:collision_box" component. The required collision box to match the entity's size would create an oversized, unsightly shadow under the entity.
  • The game generates structures containing our appliances. Since these structures can't include entities during generation, the game spawns the entities during runtime based on the block's position and rotation.

However, there is a downside to keeping this system.

What happens if the entity exists in the world without the block(s) or vice versa? What can be done to make sure that this never happens and resolve any issues when it does?

Implement fallback logic for block-like entities to prevent invalid states

There are two different states to account for when determining what to do with these block-like entities:

  • The block exists but the entity doesn't
  • The entity exists but the block doesn't

When the block exists and the entity doesn't, the game assumes that the entity was meant to exist in the world, but is just missing or hasn't been loaded yet. To differentiate the two, the game ticks the dummy block for a set amount of ticks to check for the corresponding entity. If it exists, it will stop checking. If it doesn't exist, The game will run an entity remove event in the area (as one last potential fail safe), and then summon a new entity. This logic is particularly useful when loading entities in custom structures, since Minecraft features do not support custom entities in structure spawning.

When the entity exists and the block doesn't, we know that this state should not exist. However, we have to distinguish between a truly missing block and one that remains unloaded due to slow world loading. We make sure that the chunk is loaded first before checking if the block exists. Under this circumstance, we can guarantee if the entity is meant to exist or not.

THE PROBLEM

Simply demonstrating a bunch of crops, recipes, and appliances, will result in an extremely boring trailer

THE SOLUTION

Create a story following multiple characters gathering ingredients, cooking, and serving customers to demonstrate the player experience

I started ideation by analyzing the types of sets I had access to. I knew that our team had created builds for some marketing screenshots, so I decided to reuse them for the trailer.

Using these builds and other builds that were made but not used, I created a list of available shooting locations to help guide the script.

I decided to pick a distinct location for each character in their cooking journey. Player A was going to use the pizza shop, Player B was going to use a separate street set for a taco stand, and Player C was going to use the sushi restaurant.

Now that I had all the information I needed, I started writing the trailer script in TV-column format.

As you can see, this wasn't the first iteration of the script. I found that getting the right timing across different sections was harder than expected. Some sections felt too slow, and others much too fast.

Imagine creating a movie scene in your head, then timing exactly how long each shot should take. Pretty hard, right?

So, what can be done to fix this timing issue?

Practice the script in-game with a timed walkthrough

After a first draft of the script was complete, I ran through it in game. What I found is that sections that seem fine in writing may not play out as well in practice.

For example, I originally didn't have the comparison section between serving banquet villagers low-tier foods like apples, and high-tier foods like hamburgers. When I ran through a scene where the villagers were eating food, I felt like something was missing from the scene. I had accidentally overlooked the interaction with the banquet villagers. By simulating the script, I was able to find issues in my initial writing to then iterate.

Credits

Models, Textures, and Builds: Roman Cecchi

© Moonsworth Bedrock, LLC