mojira.dev
MC-95922

Destroyed dropped Minecart items use entity name

The bug

When breaking a minecart (any type) in survival a renamed minecart item is created. In previous versions a renamed minecart was only dropped if the minecart was renamed before.

Additionally some minecart types have no translation and are displayed as: entity. + Entity type + .name
Full list:
entity.MinecartRideable.name
entity.MinecartFurnace.name
entity.MinecartTNT.name
Minecart with Chest
Minecart with Hopper

How to reproduce

Place any type of minecart and break it in Survival mode.

The reason

The following is based on decompiled version of Minecraft 1.9 using MCP 9.24 beta. All method and class names are the names used in the decompiled version.

The reason why this happens is because in previous versions the class net.minecraft.entity.item.EntityMinecart had an extra field for the custom name that would be used for dropping the item (this required a lot of methods to be overridden). In 1.9 minecarts do not have this extra field anymore. The problem is that the method net.minecraft.entity.item.EntityMinecart.killMinecart(DamageSource) uses the method net.minecraft.entity.Entity.getName() to test whether or not the minecart has a custom name. This method will always return a string because this method is used for displaying for example the entity name in the chat. Instead the method of the minecart should test if it has a custom name.

public void killMinecart(DamageSource source)
{
    this.setDead();

    if (this.worldObj.getGameRules().getBoolean("doEntityDrops"))
    {
        ItemStack itemstack = new ItemStack(Items.minecart, 1);

        // Replaced this
        //if (this.getName() != null)
        //{
        //    itemstack.setStackDisplayName(this.getName());
        //}
        if (this.hasCustomName())
        {
            itemstack.setStackDisplayName(this.getCustomNameTag());
        }

        this.entityDropItem(itemstack, 0.0F);
    }
}

Linked issues

MC-95928 Destroyed and picked up minecart changes name to "entity.MinecartRideable.name" Resolved MC-96003 When minecart is destroyed by cactus and picked up the name changes to "entity.MinecartRideable.name" Resolved MC-96067 Drops of special minecarts don't have a name Resolved MC-96093 Minecart GUI displays "container.minecart" in name field Resolved MC-96266 Minecart storage name Resolved

Attachments

Comments 39

The dropped minecarts also have this titles and it also affects minecarts with TNT or furnace.

The bug that the items have this name as well is probably because the name is wrong.

Confirmed for 16w04a, also the display name is not checked by the game code. What matters is that the string pointed to by container.minecart is not displaying, Marcono1234.

That should be covered by the first point:

The GUI of a MinecartChest and MinecartHopper both shows container.minecart. This has a translation but is despite that not translated.

Confirmed for 16w07b

Furnace Minecarts experience a similar issue. Breaking them will drop a Minecart that's named entity.MinecartFurnace.name.

29 more comments

Look at the fix version, it's fixed in a 1.11 snapshot, not 1.10.

reaverofdarknes1

Confirmed fixed as of 1.11 release.

Matthew Reynolds

This has happened to me just now. It said entity.MinecartRideable.name for me too.

[Mod] violine1101

@unknown Which Minecraft version did you use? This bug should be fixed as of 1.11 / 16w32a.

Is it on a server?

marcono1234

Jens Bergensten

Confirmed

GUI, item, minecart, translation

Minecraft 16w03a, Minecraft 16w04a, Minecraft 16w05b, Minecraft 16w06a, Minecraft 16w07a, ..., Minecraft 16w21b, Minecraft 1.10 Pre-Release 1, Minecraft 1.10 Pre-Release 2, Minecraft 1.10, Minecraft 1.10.2

Minecraft 16w32a

Retrieved