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
andSpawnCount
: only set whenMinSpawnDelay
is providedRequiredPlayerRange
: only set whenMaxNearbyEntities
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
Use the following command
/setblock ~ ~1 ~ minecraft:spawner{SpawnData:{entity:{id:"armor_stand"}},RequiredPlayerRange:10s,MinSpawnDelay:5s,MaxSpawnDelay:5s}
Inspect the NBT data with for example the
/data get block
commandNBT 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
is duplicated by 3
Attachments
Comments 26
Duplicate of MC-31115
Is there any reason for that?