mojira.dev
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

Linked issues

Attachments

Comments 26

Is there any reason for that?

But why is it overwriting then RequiredPlayerRange and not only sets MaxNearbyEntities?

Looks like it. Good catch, gerbil.

16 more comments

Can confirm in 21w15a.

Can confirm in 1.17.

Can confirm in 1.17.1.

Can confirm in 1.18.1

Confirmed in 1.20.3-rc1

marcono1234

(Unassigned)

Confirmed

Platform

Low

Commands

MaxNearbyEntities, RequiredPlayerRange, mob-spawner, spawner

Minecraft 1.8.6, Minecraft 15w34d, Minecraft 15w51b, Minecraft 1.9, Minecraft 1.9.1 Pre-Release 3, ..., 1.17, 1.17.1, 1.18.2, 1.20.3 Release Candidate 1, 1.21.4

Retrieved