Mojira Archive
MC-80690

Some tags for spawners are only set if other tags are provided as well

The bug

When you create a spawner or use the /blockdata command to modify the NBT data of a spawner (or spawner minecart) some of the tags are only set if other tags are provided as well.

Affected tags
  • MaxSpawnDelay and SpawnCount: only set when MinSpawnDelay is provided
  • RequiredPlayerRange: only set when MaxNearbyEntities is provided

The reason

In 1.8 the game tests if these tags are provided and then set the other tags. In my opinion this should be done for every tag and not only for one single tag.

Affected method: public void readFromNBT(NBTTagCompound p_98270_1_) of the net.minecraft.tileentity.MobSpawnerBaseLogic class (MCP 1.8 names)

public void readFromNBT(NBTTagCompound p_98270_1_)
{
	//...

	if (p_98270_1_.hasKey("MinSpawnDelay", 99))
	{
		this.minSpawnDelay = p_98270_1_.getShort("MinSpawnDelay");
		this.maxSpawnDelay = p_98270_1_.getShort("MaxSpawnDelay");
		this.spawnCount = p_98270_1_.getShort("SpawnCount");
	}

	if (p_98270_1_.hasKey("MaxNearbyEntities", 99))
	{
		this.maxNearbyEntities = p_98270_1_.getShort("MaxNearbyEntities");
		this.activatingRangeFromPlayer = p_98270_1_.getShort("RequiredPlayerRange");
	}
	
	//...
}

How to reproduce

  1. Use the following command
    /setblock ~ ~1 ~ minecraft:spawner{SpawnData:{entity:{id:"armor_stand"}},RequiredPlayerRange:10s,MinSpawnDelay:5s,MaxSpawnDelay:5s}
    
  2. Inspect the NBT data with for example the /data get block command
    NBT data
    {
        SpawnData: {
            entity: {
                id:"armor_stand"
            }
        },
        MaxNearbyEntities:6s,
        RequiredPlayerRange:16s,
        SpawnCount:0s,
        MaxSpawnDelay:5s,
        SpawnRange:4s,
        Delay:0s,
        MinSpawnDelay:5s
    }
    

    The required player range was defaulted to 16