Uploaded image for project: 'Minecraft: Java Edition'
  1. Minecraft: Java Edition
  2. MC-80690

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

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Reopened
    • Resolution: Unresolved
    • Affects Version/s: Minecraft 1.8.6, Minecraft 15w34d, Minecraft 15w51b, Minecraft 1.9, Minecraft 1.9.1 Pre-Release 3, Minecraft 1.9.2, Minecraft 1.9.3 Pre-Release 3, Minecraft 1.10.2, Minecraft 16w39c, Minecraft 16w44a, Minecraft 1.11.2, Minecraft 1.12.1, Minecraft 1.12.2, Minecraft 1.13.2, Minecraft 19w04b
    • Fix Version/s: None
    • Confirmation Status:
      Confirmed
    • Category:
      (Unassigned)

      Description

      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:mob_spawner 0 replace {SpawnData:{id:"armor_stand"},RequiredPlayerRange:10s,MinSpawnDelay:5s,MaxSpawnDelay:5s}
        
      2. Inspect the NBT data with for example the /blockdata command
        NBT data
        {
        	SpawnData:{
        		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

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                Unassigned
                Reporter:
                marcono1234 [Mod] Marcono1234
              • Votes:
                10 Vote for this issue
                Watchers:
                13 Start watching this issue

                Dates

                • Created:
                  Updated:
                  CHK: