How to reproduce
Place a minecart with command block
Leave and reopen the world
Destroy it in creative mode using your hand, a sword / tool or an arrow
→ The minecart with command block drops a (regular) minecart (item) named "@", whereas an empty / normal minecart would’ve dropped nothing after these steps. Also if you don’t leave and reopen the world first, the minecart with command blocks drops nothing either.
Code analysis
The following is based on decompiled version of Minecraft 1.8 using MCP. All method and class names are the names used in the decompiled version.
The reason why this happens is that the public void writeDataToNBT(NBTTagCompound p_145758_1_)
method of the net.minecraft.command.server.CommandBlockLogic
class always saves the CustomName
in the NBT data. As this only happens when you unload the minecart or reopen the world a MinecartCommandBlock that is summoned and directly destroyed does not cause this. Instead the method should only save the CustomName
if it is not "@".
/**
* Stores data to NBT format.
*/
public void writeDataToNBT(NBTTagCompound p_145758_1_)
{
p_145758_1_.setString("Command", this.commandStored);
p_145758_1_.setInteger("SuccessCount", this.successCount);
// Replaced this
//p_145758_1_.setString("CustomName", this.customName);
if (!this.customName.equals("@")) {
p_145758_1_.setString("CustomName", this.customName);
}
p_145758_1_.setBoolean("TrackOutput", this.trackOutput);
if (this.lastOutput != null && this.trackOutput)
{
p_145758_1_.setString("LastOutput", IChatComponent.Serializer.componentToJson(this.lastOutput));
}
this.field_175575_g.func_179670_b(p_145758_1_);
}
Related issues
is duplicated by
testing discovered
Attachments
Comments


Confirmed

Confirmed for
15w34d
15w35b
Incorrect duplicate link
This report is about unnamed MinecartCommandBlocks

MinecartCommandBlocks are actually named.

Confirmed for
1.9-pre1
@unknown this is a bug that only occurs when you reload the world

Please link to this comment in the description
The following is based on decompiled version of Minecraft 1.8 using MCP. All method and class names are the names used in the decompiled version.
The reason why this happens is that the public void writeDataToNBT(NBTTagCompound p_145758_1_)
method of the net.minecraft.command.server.CommandBlockLogic
class always saves the CustomName
in the NBT data. As this only happens when you unload the minecart or reopen the world a MinecartCommandBlock that is summoned and directly destroyed does not cause this. Instead the method should only save the CustomName
if it is not "@".
/**
* Stores data to NBT format.
*/
public void writeDataToNBT(NBTTagCompound p_145758_1_)
{
p_145758_1_.setString("Command", this.commandStored);
p_145758_1_.setInteger("SuccessCount", this.successCount);
// Replaced this
//p_145758_1_.setString("CustomName", this.customName);
if (!this.customName.equals("@")) {
p_145758_1_.setString("CustomName", this.customName);
}
p_145758_1_.setBoolean("TrackOutput", this.trackOutput);
if (this.lastOutput != null && this.trackOutput)
{
p_145758_1_.setString("LastOutput", IChatComponent.Serializer.componentToJson(this.lastOutput));
}
this.field_175575_g.func_179670_b(p_145758_1_);
}

So how is this not a duplicate of MC-10366?

This one here is about the fact that when a MinecartCommandBlock gets saved the default CustomName
is always saved, even if it is the default one which causes it to always drop the Minecart.
This bug here also happens in survival mode.

I don't see anything wrong with saving the default CustomName.

Saving the default name as CustomName
causes this problem, that breaking the Minecart if its NBT data was not saved already does not drop anything, however once its NBT data was saved it drops a renamed minecart.
Anyways it is definitely not a duplicate of MC-10366 because the bug described in this report happen in Survival mode as well

I think we're talking over each other. I'm saying "Minecarts even save the default custom name (a preset, if you will)" is not a bug. The fact that command block minecarts drop when destroyed after reloading is caused by MC-10366. When MC-10366 is fixed, minecart command blocks will stop dropping when destroyed after reloading.
that breaking the Minecart if its NBT data was not saved already does not drop anything
I do not consider this a problem - minecart command blocks, just like command blocks, are not meant for survival, so they don't drop in survival. They don't drop in creative because minecarts in general don't drop in creative.
I agree, the fact that renamed command block minecarts drop themselves in survival is a bug. Please create a separate ticket for that.

I agree, the fact that renamed command block minecarts drop themselves in survival is a bug. Please create a separate ticket for that.
As they only drop a minecart item, but no command block, I am not sure if this is really a bug, but it could be, see MC-11765.
However as long as it is not confirmed to be a bug this report here has to stay open.
Like I said these are two different bugs and many of the optional tags like NoAI
are not saved if they contain the default value.
Even if it is confirmed to be bug, this report is still no duplicate of MC-10366.
Edit: It could be solved indeed better by only saving the custom name if one is set and having a constant which stores the default custom name.

Reopened. I completely missed that they drop regular minecarts instead of command block minecarts.


Confirmed for 1.12-pre5

In the code analysis you write if (this.customName != "@")
; this won't work and should be if (!this.customName.equals("@"))
.
Hi there!
Can confirm in 1.16.1.

Affects 1.16

Affects 1.17 Pre-release 1

Affects 1.17
Can confirm in 1.19.2.

Destroying one that is renamed without relogging drops a regular minecart, with the same name. Though, placing it down and relogging still drops a minecart named "@".

Cannot reproduce in 1.21.2 Pre-Release 3
Tested with experimental minecart improvements datapack enabled.