code: public static <T> void setData(String identifier, IBlockAccess world, BlockPos pos, T data, boolean sendToClients)
  	{
  		World w = instance.world(world);
  		ChunkData<T> chunkData = instance.<T> chunkData(identifier, w, pos);
  		if (chunkData == null)
  			chunkData = instance.<T> createChunkData(identifier, instance.world(world), pos);
  
  		//MalisisCore.message("SetData " + identifier + " for " + pos + " > " + data);
  		chunkData.setData(pos, data);
  		if (sendToClients && !w.isRemote)
  		{
  			ByteBuf buf = chunkData.toBytes(Unpooled.buffer());
  			Utils.getLoadedChunk(w, pos).ifPresent(chunk -> BlockDataMessage.sendBlockData(chunk, identifier, buf));
  		}
  	}
docs: Sets the custom data to be stored at the {@link BlockPos} for the specified identifier and eventually sends the data to the clients
  watching the chunk.
  
  @param <T> the generic type
  @param identifier the identifier
  @param world the world
  @param pos the pos
  @param data the data
  @param sendToClients the send to clients