mojira.dev
MC-91245

One character namespaces are treated as "minecraft:"

Apparently Minecraft treats one character long namespaces as "minecraft:"

How to reproduce

  1. /give @p a:stone
    Works

  2. /give @p aa:stone
    Does not work

  1. /effect @p a:instant_health
    Works

  2. /effect @p aa:instant_health
    Does not work

  1. /advancement grant/revoke only a:root
    Works, affects minecraft:root

  2. /advancement grant/revoke only aa:root
    Doesn't work, unless you created a custom advancement with aa namespace

  1. Create a:test function

  2. /function @p a:test
    Doesn't work

  3. Create minecraft:test function and repeat step 2
    Works

  • (same can be done with advancements)

Code analysis

The following is based on a decompiled version of Minecraft 1.9 using MCP 9.24 beta.

The reason why this happens is because the method net.minecraft.util.ResourceLocation.splitObjectName(String) only uses the provided namespace if the index of the colon (":") is higher than 1. Instead it should probably test if it is higher then 0 because only if it is 0 the String starts with the colon.

protected static String[] splitObjectName(String toSplit)
{
    String[] astring = new String[] {"minecraft", toSplit};
    int i = toSplit.indexOf(58);

    if (i >= 0)
    {
        astring[1] = toSplit.substring(i + 1, toSplit.length());

        // Replaced this
        //if (i > 1)
        if (i > 0)
        {
            astring[0] = toSplit.substring(0, i);
        }
    }

    return astring;
}

Linked issues

Attachments

Comments 5

How about a letter that is not included in the word "minecraft" for example "L"

Added more ways to reproduce the issue, which, I assume, should work, but I didn't test them yet

Can confirm for MC 1.12.1. Also happens when using numbers.

Fixed for 1 character namespaces, but “:stone” is still valid.

marcono1234

(Unassigned)

Confirmed

character, command, effect, item, prefix

Minecraft 15w43c, Minecraft 15w45a, Minecraft 16w15b, Minecraft 1.10.2, Minecraft 16w42a, , Minecraft 1.12.1, Minecraft 1.12.2, Minecraft 17w45b, Minecraft 18w06a, Minecraft 18w15a

Minecraft 18w22a

Retrieved