Skip to content

Quirks ​

Quirks are often unintentional or unintuitive behaviors that occur due to poorly written or erroneous code. In spite of that, these are part of the Vanilla game, and a 100% accurate reimplementation should implement them as well.

Blocks ​

Wooden slab ​

Wooden slabs before 1.3.1 were retextured stone slabs. As a result, they required a Pickaxe to mine effectively, and produced stone particles when hit. The item was replaced by the modern wooden slab in 1.3.1, and renamed to "Petrified Oak Slab" in 1.13 (See MC Wiki).

Items ​

TODO

Generation ​

Ice and Snow ​

Ice is generated during the terrain shape stage anywhere the temperature is less than 0.5. However this does not line up completely with the later determined biomes, which then determine where ice and snow can form via random ticking.

UntickedTicked
Generated without random ticksGenerated with random ticks

This becomes more apparent when the relevant values are visualized.

Biomes (Map Colors) + Temp < 0.5 (Red)
Biome map with Map colors, Red marking where temperature values are less than 0.5

Biome map with Map colors, Red marking where temperature values are less than 0.5

Snow depends on the same system to determine where it can appear, though its placed later in the population stage.

NOTE

Seed for this section is -1712183887779554298, showing the area around chunk x: -1, z:6

Farlands ​

The farlands are an extremely well-known terrain-generation artifact that occurs approximately +/-12,550,821 away from (0,0). The Minecraft Wiki has a highly detailed explanation of why they happen but the simplified reason can be summed up as follows.

To read data from the perlin-noise permutation table, the position the noise is sampled at must be turned into an integer.

Due to how java Java converts between types (see Casting), the resulting 32-bit Integer (int) always lands on the same permutation table entry, giving us the familiar, infinitely stretching tunnels.

Using a signed 64-bit Integer (long) can fix this problem but it changes the tree and terrain generation slightly due to rounding differences.

Nether ​

The Nether generator is very closely related to the overworld generation.

Not using the 2D fast path ​

The Nether samples the continentalness and depth noises with a max vertical size of 1, which results in it not using the 2D fast-path that was added in Alpha 1.2.0 for 2D Perlin noise. This actually matches what the Overworld generator did before Alpha 1.2.0.

Gravel and Soulsand don't generate along shores ​

While the laval level was changed to 32 for the main ocean of Lava, it's still 64 in the surface replacement step, resulting in Gravel and Soulsand not generating as intended.

OriginalFixed
Original GenerationPatched Generation

Redstone ​

Quasi-connectivity ​

TODO

Double-trigger ​

If a Dispenser is already being powered by a lever or redstone torch, a buttons can trigger Dispensers twice on both when it presses and resets. This is because the Dispenser gets a redstone-based block update, then checks if its being powered, discovering the power by the lever/redstone torch.

Entities ​

Entity Id overflow ​

The id of entities is stored as a signed 32-bit integer, which has a maximum value of 2,147,483,647. While it's unlikely for anyone to reach or suprass this number under normal circumstances, there are certain effects that potentially occur if this number ever overflows. Any situation where the game just immediately crashes will be ignored.

Networking ​

Client Packet Processing Limit ​

The Notchian Beta 1.7.3 Client can only process ~100 Packets per Tick. Any subsequent packets are thrown onto a buffer to be processed in subsequent ticks. It's trivial to overstep this limit with lots of entities sending their positions. While this doesn't result in a crash or frame drops, it does result in very nasty rubberbanding if the buffer isn't given a chance to clear out.

Spawn Object Packet ​

The spawn object packet determines if an entity, such as an Arrow, has an initial velocity by checking if the owner entity id is greater than 0. If the global entity id overflows into the negatives, all arrows and fireballs would be sent without an initial velocity.

Misc ​

Username limits ​

Usernames must adhere to the following rules:

  • Can only be >=3 or <=16 characters long
  • Can contain upper/lowercase letters belonging to the latin alphabet
  • Can contain numbers
  • Can contain underscores

The following is every valid character for a username (ignoring the line breaks)

text
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789
_
c
char[] legal_characters = {
    'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
    'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
    '0','1','2','3','4','5','6','7','8','9',
    '_'
};

In the early days (around classic) these restrictions weren't as tough, so some early players were able to snatch usernames with illegal characters.

Renderable characters ​

Since the font rendering system of Beta 1.7.3 predates the inclusion of the GNU Unifont font to render any characters that the Minecraft font does not contain, the then available Minecraft font is all that's available. In addition to that, the actually usable range is further limited by what's inside of the font.txt file.

The following contains every legally printable character (ignoring the line breaks)

text
 !"#$%&'()*+,-./
0123456789:;<=>?
@ABCDEFGHIJKLMNO
PQRSTUVWXYZ[\]^_
'abcdefghijklmno
pqrstuvwxyz{|}~⌂
ÇüéâäàåçêëèïîìÄÅ
ÉæÆôöòûùÿÖÜø£Ø×ƒ
áíóúñѪº¿®¬½¼¡«»
c
char[] valid_characters = {
    ' ','!','\"','#','$','%','&','\'','(',')','*','+',',','-','.','/',
    '0','1','2','3','4','5','6','7','8','9',':',';','<','=','>','?',
    '@','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O',
    'P','Q','R','S','T','U','V','W','X','Y','Z','[','\\',']','^','_',
    'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o',
    'p','q','r','s','t','u','v','w','x','y','z','{','|','}','~','⌂',
    'Ç','ü','é','â','ä','à','å','ç','ê','ë','è','ï','î','ì','Ä','Å',
    'É','æ','Æ','ô','ö','ò','û','ù','ÿ','Ö','Ü','ø','£','Ø','×','ƒ',
    'á','í','ó','ú','ñ','Ñ','ª','º','¿','®','¬','½','¼','¡','«','»'
};

Values outside of this range cannot be rendered without mods.

NOTE

The font is closely based on the IBM EGA 8x8 font, even using the exact same code-page layout and adopting the appearance of most non-character glyphs (Source: https://minecraft.wiki/w/Mojangles#Trivia)

Multiplayer-specific ​

Some quirks are only noticable in multiplayer, as in Beta 1.7.3 that part of the codebase was still very work-in-progress, and wasn't really fully finished until Release 1.3.1, when Singleplayer started using the internal server (though even then a lot of issues remained).

Entities get teleported to the top of any bounding box ​

The client will always teleport any entities to the top of any bounding box they encounter. This is most obvious with arrows, which visually get teleported to the top of whichever block they hit.

Always Pig spawners ​

All spawners in multiplayer show up as pig spawners. This is because there is no packet that tells a client what mob a spawner spawns until Release

Missing multiplayer soundeffects ​

The number of networked soundeffects is very low, so lots of blocks that make sound in singleplayer and/or future versions are just silent in Beta 1.7.3.

  • Buttons
  • Pressure plates
  • Bows being shot by other entities

Only added in future versions ​

Some things that got added in future versions seem very obvious to add, and yet they were not a thing yet in Beta 1.7.3.

  • Wooden tools cannot be used as fuel (Added in Release 1.3.1)
  • Water-bucket clutch/Water negating fall damage (Added in Release 1.3.1)