Caves & Cliffs: Part I: Dev Q&A

Last week we hosted a Dev Q&A on the Minecraft Discord server in honor of the release of the Caves & Cliffs Update: Part I! There was an overwhelming amount of questions about the new update, and our devs tried their very best to answer all your burning questions about the process that went in to bringing this update to life.

Joining us was Jasper, our lead artist, Agnes, the Vanilla Minecraft Game Director, Ingela, a Producer on caves & Cliffs Part I, and Cory, Alexander, and Ulraf -- our gameplay designers and developers.

Let’s dive right into the Question & Answer highlights, shall we?


Question: What was the most difficult aspect of coding the goat?

Alexander: For sure the jumping! We first started with a very "naive" approach where we just "transformed" the goat in a "nice" arc. However, we realized this caused many issues, so we went back to the drawing board and landed on the idea of giving the goat an initial velocity and then let physics do its part :) However, calculating Projectile Motion while taking air resistance in consideration becomes more complicated, so we ended up turning off air resistance for the mob while it jumps.

Question: Will Caves & Cliffs: part II be considered 1.18 or will it still be part of 1.17?

Agnes: It will be 1.18, since it comes with so many new features.

Question: Hi! How is the staff doing?

Alexander: It has ofc been a challenge to deliver this update while 100% working from home. Strangely though, I would say the team has come closer together than ever, and in particular we are working much more cross-functionally and closer in collaborating to get features done for both editions and in parity with each other! We are very happy with having part one released, and we’re looking forward to delivering part two next!

Question: Will mobs that lost in Mob Vote 2020 be added in 1.18?

Ulraf: All the options that lost the 2020 vote are going back to our Ideas Library! We might bring them back in the future but no guarantee!

Question: When will candles come to Bedrock?

Alexander: They are already in the Beta!

Question: Will we ever get copper/amethyst tools or armor?

Ulraf: We don't want to add a new tier of tools and armor unless it has a new and exciting place in the progression (like Netherite had!) No current plans to make tools and armor from copper/amethyst.

Question: When or will you add desired features from Java like hardcore and spectator to bedrock?

Agnes: We want both Bedrock and Java to be the same amazing experience, parity between the editions is important for us. We know we aren't there yet, but that is the goal! So, we should add spectator and hardcore to Bedrock, we can't say when yet.

Question: What tips do you have for making textures? I love the style and shading of your Minecraft textures!

Jasper: Fundamentally you have to understand that the art style of Minecraft is inherently Pixel Art which is a medium with many different styles. Minecraft textures is just one of those styles. To become really good at making Minecraft textures you should try to make a lot of other pixel art to understand how pixels work with each other and how color theory works. So my tip is: Learn pixel art fundamentals!

Question: Any inspiration for the lush caves we’ll be expecting in 1.18? How did you guys come up with them?

Agnes: For the Lush Caves we really wanted you as a player to feel you are in, and under, vegetation. There's something fascinating with looking up and see a ceiling full of greenery. I have a memory of being in my grandparents’ garden when I was a child and standing under really big leaves. We wanted to achieve a similar feeling. We also took inspiration from an artist called John Bauer, who often painted small characters in really big forests. A special thing with cave biomes is that they have a ceiling, so we really wanted to use the ceiling in the cave biomes we crafted .

Question: Is there any reason for axolotls being as big as they are? In real life they are tiny animals.

Ingela: It is much easier to give an animal a character in the game if they are bigger and it is also easier to interact with it on touch screens.

Question: Do you plan to add more uses for the amethyst?

Corey: I have a big list of ideas and even some rough prototypes, but I cannot promise anything just yet!

Question: What was by far, the funniest moment while working on Caves and Cliffs: Part I?

Corey: I was working on fixing a bug with axolotls and accidentally turned off their gravity, so all the axolotls I was testing with and playing with started floating away into the sky like balloons when I realized my mistake, I turned gravity back on, and then they all fell to the ground and...

Question: What was the most challenging part of the production of the update besides the terrain/world generation?

Ingela: When we came to the realization that we would not be able to deliver our promise of the huge scope of the update with all features and world generation challenges and had to take the decision to split the update in two. Pulling out the world generation tech from Part I and refocusing the team from the full focus of world generation to deliver all blocks, mobs and items in June. We are very happy for all the understanding and love from our players and that our team is doing well.


These were just some of the highlights from last week’s Q&A. To go back and read the full chat, and to catch more Dev Q&As in the future, be sure to check out the official Minecraft Discord!  

Written By
Kristina Horner



    Load more
    <!-- Take Over Start --> <div tabindex="0" id="<%=preferred_tile.image.videoId %>-takeover" class="takeover"> <div class="takeover__mask"></div> <div class="takeover__container"> <div class="row justify-content-center"> <div class="col-8"> <div class="takeover__buttons"> <button data-aem-contentname="hexagon" class="btn btn-primary btn-hexagon" data-type="takeover-close" aria-hidden="true"> <svg role="img" class="svg-icon icon-2x"> <use xlink:href="#pixel-close"></use> </svg> <span class="sr-only">Close</span> </button> </div> </div> </div> <div class="takeover__content"> <div class="takeover__body"> <div class="row justify-content-center"> <div class="col-8"> <div class="video-16-9"> <div class="video-player-container" id="<%=preferred_tile.image.videoId %>-takeover-player" data-video-provider="<%=preferred_tile.image.videoProvider %>" data-video-id="<%=preferred_tile.image.videoId %>" data-video-url="<%=preferred_tile.image.videoURL %>" data-video-type="<%=preferred_tile.image.videoType %>" data-video-width="1920" data-video-height="1080" data-takeover="#<%=preferred_tile.image.videoId %>-takeover"> </div> </div> </div> </div> </div> <div class="takeover__footer"> <button data-aem-contentname="focusable" class="sr-only sr-only-focusable" data-type="takeover-close">Close video player</button> </div> </div> </div> </div> <!-- Take Over End --> <% if(preferred_tile.image.content_type=="tweet" ) {%> <li lang="<%=articleLang %>" class="tile tile-static-content tweet-tile <%=preferred_tile.image.background_color %>" data-category="<%=primary_category %>" > <h3 class="tweet-tile__title d-flex align-items-center"> <svg role="img" class="svg-icon icon-2x mr-2"> <use xlink:href="#pixel-twitter"></use> </svg> On Twitter </h3> <div class="media tweet-tile-media"> <a data-aem-contentname="title link" class="tile-link" href="<%=preferred_tile.image.tweet_url %>" aria-label="Tweet tile"> <div class="media-left"> <img width="45" height="45" src="<%=preferred_tile.image.avatar %>" alt="<%=preferred_tile.image.alt %>" ></div> <div class="media-body"> <h4 class="media-heading"> <span class="tweet-tile-media__name"><%= preferred_tile.image.tweet_name%></span> <br> <span class="tweet-tile-media__handle"><%= preferred_tile.image.tweet_handle%></span> </h4> </div> </a> </div> <a class="tile-link" href="<%=preferred_tile.image.tweet_url %>" aria-label="Tweet tile" target="_blank"><%= preferred_tile.image.tweet_desc%></a> </li> <% } else { %> <% if(preferred_tile.updatedPreferredImageSize) {%> <li lang="<%=articleLang %>" class="tile tile--size-<%=preferred_tile.updatedPreferredImageSize%> <%=preferred_tile.image.background_color%>" data-category="<%=primary_category %>" content-type="<%= preferred_tile.image.content_type %>" <% } else { %> <li lang="<%=articleLang %>" class="tile tile--size-<%=preferred_tile.tile_size%> <%=preferred_tile.image.background_color%>" data-category="<%=primary_category %>" content-type="<%= preferred_tile.image.content_type %>" <% } %> <% if(preferred_tile.image.videoId) {%> data-target-takeover="<%=preferred_tile.image.videoId %>-takeover" data-type="takeover-trigger" <% } %> <% if(preferred_tile.orginal_tile_size){%> data-orginal-tile-size="tile--size-<%=preferred_tile.orginal_tile_size %>" <%}%> > <a data-aem-contentname="<%= preferred_tile.title %>" class="tile-link" <% if(preferred_tile.image.content_type=="outgoing-link" ) {%> href="<%=preferred_tile.linkUrl%>" <%}else{%> href="<%=preferred_tile.linkUrl%>" <%}%> aria-label="<%= preferred_tile.title %>"> <span class="tile__image-container"> <picture class="tile__image" data-preffered-img="<%=preferred_imageURL %>"> <% if(preferred_tile.updatedPreferredImage) {%> <source media="(min-width: <%=preferred_tile.image_bp %>)" srcset="<%=preferred_tile.updatedPreferredImage %>"> <% } else { %> <source media="(min-width: <%=preferred_tile.image_bp %>)" srcset="<%=preferred_tile.image.imageURL %>"> <% } %> <img role="presentation" class="tile__image" src="<%=preferred_tile.image.default_imageURL %>" alt="<%= preferred_tile.title %> img"> </picture> </span> <div class="sliding-content video-tile" > <div class="sliding-content__body" aria-hidden="true"> <%if(preferred_tile.image.content_type && preferred_tile.image.content_type=='video') { %> <div class="video-tile__play-btn" > <span class="btn btn-primary btn-hexagon"> <svg role="img" class="svg-icon icon-shadow icon-2x"> <use xlink:href="#pixel-play"></use> </svg> </span> <span class="sr-only">Play video</span> </div> <% } %> <% if(preferred_tile.showcategory=="true"){%> <div class="tile-category" aria-hidden="true"> <div data-aem-category="<%=primary_category %>" class="tile-category__text"> <%=primary_category %> </div> </div> <% } %> <div class="tile-caption" aria-hidden="true"> <h3 class="tile-preferred-caption__title tile-caption__title <%=preferred_tile.header_size%>"> <%= preferred_tile.title %> </h3> <h3 class="tile-default-caption__title tile-caption__title <%=preferred_tile.default_header_size%>"> <%= preferred_tile.default_title %> </h3> <p class="tile-caption__text"><%= preferred_tile.sub_header %></p> </div> </div> </div> </a> </li> <% } %> Up Arrow