Malta in Minecraft

← Blog ·

Getting Malta's beaches right, beach by beach

How Malta's beaches in Minecraft got the right colour, depth, outline, pebbles and an edge you can walk out of the sea onto.

In short: A beach in Minecraft needs a colour, a depth, an outline, the right material and an edge you can climb out of the sea onto. My first beaches got most of those slightly wrong. This is how each one was put right, and what broke while I fixed it.

San Blas bay in Gozo from the sea in Malta in Minecraft (shaders, test area)
San Blas bay in Gozo from the sea in Malta in Minecraft (shaders, test area)

Sand on a map

My first beaches came from OpenStreetMap, the free map drawn by volunteers. Wherever it marked sand, I laid a few blocks of sand on top of the rock layers. The height survey couldn't help here, because to a laser a beach is just low, flat ground.

Flying over them, they looked fine. Walking on them, swimming up to them and digging into them told a different story, one beach at a time.

Ramla's colour

Ramla l-Ħamra, "the red beach", started out as Minecraft's red sand, a flat bright orange. The real sand is a golden ochre that no single block matches. I tried four mixes and kept the one closest to the photos: mostly red sand with about 30 % white sand in soft patches. Under the water the red fades out over about 40 m, so the sea floor turns back to white sand without a hard line.

Work in progress (earlier test, not final). Ramla l-Ħamra: 1. all red sand, 2. red sand with soft white patches
Work in progress (earlier test, not final). Ramla l-Ħamra: 1. all red sand, 2. red sand with soft white patches

The fix showed a mistake in my dune rule. It had turned all the low scrub within 180 m of the beach red, leaving about a dozen loose red patches on the slopes. Only sand that touches the beach stays now.

Ramla l-Ħamra from the bay in Malta in Minecraft (shaders, test area)
Ramla l-Ħamra from the bay in Malta in Minecraft (shaders, test area)

How deep the sand goes

Every beach was a skin of 3 to 4 blocks of sand. The geological map has no sand on it, so at Ramla the rock came up 6 to 25 m too high.

Two beaches have been measured properly. A 2024 study by Galone et al. mapped the sand thickness under Ramla and under the south beach of Mellieħa Bay, and I traced both maps into the world.

Work in progress (earlier test, not final). A cut through Ramla's beach, height stretched three times: 1. a 4-block skin of sand, 2. the measured depth
Work in progress (earlier test, not final). A cut through Ramla's beach, height stretched three times: 1. a 4-block skin of sand, 2. the measured depth

For the rest I needed a rule, and my first one failed. Filling the sand in smoothly from its edges got between 9 and 83 % of the real volume at Ramla, and less than nothing at Mellieħa, because sea walls and roads behind the beach pushed it the wrong way. The rule I kept lets the rock carry on sloping down from the ground around the beach, half a metre per metre, until it is 5 m below the sea. On the two measured beaches it gets 93 % and 97 % of the real volume.

Where the beaches are

Comparing OpenStreetMap with Gatt's list of 39 Maltese beaches turned up three missing ones: Xemxija, Buġibba's Bay Square and Mistra Bay. I drew them on the Planning Authority's 2018 aerial photo. The first versions came out as zigzags, because every edge in the world gets a random wobble of up to 6 m so outlines don't look ruler-straight, and on a 10 m beach that wobble tore it apart. Drawn beaches skip it now.

Work in progress (earlier test, not final). Mistra Bay: 1. only scraps of sand, 2. the beach drawn from the aerial photo
Work in progress (earlier test, not final). Mistra Bay: 1. only scraps of sand, 2. the beach drawn from the aerial photo

Then I traced 30 beaches on the photo. Picking out sand by colour worked at Golden Bay and failed on Pretty Bay's grey sand, so I traced by hand. My traces had too few points and came out as stiff polygons, worse than the map. Now the trace only marks roughly where the beach is, and the photo decides the edge, metre by metre.

Work in progress (earlier test, not final). Pretty Bay: aerial photo (Planning Authority, Malta, 2018), 1. beach from the map data, 2. beach traced on the photo
Work in progress (earlier test, not final). Pretty Bay: aerial photo (Planning Authority, Malta, 2018), 1. beach from the map data, 2. beach traced on the photo

Around the same time I noticed a thin line of mossy rock where every sandy beach met the water. My sea-floor rule had counted dry land as depth zero, so the first row of sea looked like a steep drop and turned to rock. Sandy beaches now get sand in front of them.

Work in progress (earlier test, not final). Golden Bay: 1. a line of mossy rock at the water, 2. sand to the water
Work in progress (earlier test, not final). Golden Bay: 1. a line of mossy rock at the water, 2. sand to the water

Pebbles

Some beaches on the map were never sand. I had ignored the map's note on what each is made of, so Daħlet Qorrot, a pebble beach in Gozo, was 77 % sand. Pebble beaches are now gravel with clumps of cobblestone, stone, andesite and diorite. Mixed beaches such as Ħondoq and Xlendi are sand with pebble patches.

Work in progress (earlier test, not final). 1. Fomm ir-Riħ as sand, 2. as pebbles, 3. Ħondoq with grass between beach and sea, 4. Ħondoq fixed
Work in progress (earlier test, not final). 1. Fomm ir-Riħ as sand, 2. as pebbles, 3. Ħondoq with grass between beach and sea, 4. Ħondoq fixed

Two odd faults showed up. At Ħondoq, a strip of grass was left between the beach and the sea, where my outline met the coast at an angle. And a dirt block appeared on the beach. Minecraft drops blobs of dirt and ore underground by replacing stone-type blocks, and pebbles count as stone-type blocks. At Fomm ir-Riħ, 12 ore blocks were lying on the beach. The pebbles are now put back after the ores are placed.

Fomm ir-Riħ pebble beach in Malta in Minecraft (shaders, test area)
Fomm ir-Riħ pebble beach in Malta in Minecraft (shaders, test area)

Climbing out of the sea

From the water, every beach was a two-block wall: the sand stood a block above the water, which was itself a block deep at the edge. Now the sand at the water's edge sits level with the surface and the beach rises one block at a time behind it. You can swim in and walk straight out.

Work in progress (earlier test, not final). Golden Bay from the water: 1. a two-block wall, 2. level with the water
Work in progress (earlier test, not final). Golden Bay from the water: 1. a two-block wall, 2. level with the water
Golden Bay in Malta in Minecraft (shaders, test area)
Golden Bay in Malta in Minecraft (shaders, test area)

San Blas and its boulders

San Blas in Gozo has orange sand too, so it got Ramla's mix. Beside it ran a strip of bare pale rock that looked like paving. On the aerial photo that strip is boulders and rubble, warm grey-beige and close to the colour of the sand.

Work in progress (earlier test, not final). San Blas: 1. plain sand, 2. red sand mix, 3. the pale rock strip beside it, 4. the boulder shore
Work in progress (earlier test, not final). San Blas: 1. plain sand, 2. red sand mix, 3. the pale rock strip beside it, 4. the boulder shore

No Minecraft block sits between red sand and grey stone, so I compared the photo's colours with the average colour of every block and tried mixes. Plain grey rubble was too cold, and terracotta came out pink. What worked was the mix itself: pale local rock with cobblestone, stone and andesite in clusters of different sizes, red sand between the stones near the beach, and a few larger boulders.

The boulder shore beside San Blas beach in Malta in Minecraft (shaders, test area)
The boulder shore beside San Blas beach in Malta in Minecraft (shaders, test area)

The last fixes, drawn by hand

Finally I printed a sheet for every beach with my coastline over the photo, drew corrections on them, and marked the piers so they are built as stone decks. A small script reads the drawings back in.

Lessons from the sand

  • Dig, swim and walk. Most of these faults were invisible from the air.
  • The photo knows the edges. My own careful tracing was worse than letting the photo decide.
  • When no block has the right colour, a good mix of several gets close.

All of this was built in small test areas. It goes into the next full build of Gozo, and Malta later.

If you have photos of a Maltese beach, especially old ones that show how it has changed, I'd love to see them: [email protected].

Technical details
  • Ramla mix: about 70/30 red/white sand in noise patches; red share on the sea floor falls with a smoothstep to zero 40 m out.
  • Sand depth: grids traced from Galone et al. 2024 (Remote Sensing 16:40), figs 8a and 9a; Ramla trace 93,900 m³ against the paper's 88,440 m³. Elsewhere the rock continues the nearest non-sand ground (taken at most 3 m above sea level) down at 0.5 m/m, flat from 5 m below sea level, dunes at most 7 m; RMS 1.5 and 2.7 m per column on the measured beaches. Caps from Gatt 2021: Mellieħa and St Paul's Bay 5 m, St George's 1.5 m, Buġibba 0.6 m.
  • Outlines: 30 traces on the Planning Authority 2018 orthophoto (25 cm); the edge is taken per 1 m cell from the photo near the trace, with a ±3 m wobble that never cuts the core.
  • Pebbles: kind from the OpenStreetMap surface tag plus name overrides; pebble cover 3 blocks deep; pebbles restored after ore placement (0 wrong in 11,280 checked blocks).
  • Walk-out edge: beach cells touching the sea, and beach ground under 0.5 m in the survey up to about 3 m from the water, top out at y 62; other beach cells at most one block above their lowest beach neighbour (221 edge cells at Golden Bay).
  • San Blas: rubble 40 % local rock, 22 % cobblestone, 18 % stone, 15 % andesite, 5 % gravel by two-octave noise; red sand fading out over 26 m; colours compared in Lab against block texture averages (Minecraft 26.3).
  • Pictures: all from test worlds. The numbered stage pictures are earlier test rounds without shaders, often with other fixes still missing. The shots marked "shaders" use Complementary Unbound and Faithful 64x.